2013-04-15 1 views
4

Я новичок в разработке Windows-телефонов. Я хотел бы спросить, можно ли сделать этот сценарий. Мне нужно получить доступ к переменной в XAML, используя мой код позади, тогда я добавлю его как элемент в мой существующий список, найденный в моей модели просмотра. Поэтому мне нужно получить доступ к обоим моим View Model, чтобы получить список и XAML, чтобы получить переменную из ресурсов.Доступ к переменным из XAML и объекта из ViewModel с использованием кода Behind

Выполнено ли это? Если да, то как я могу получить к нему доступ. Это то, что у меня есть в моем нынешнем XAML.

<phone:PhoneApplicationPage.Resources> 
    <system:String x:Key="scanName">SCAN</system:String> 
</phone:PhoneApplicationPage.Resources> 

Спасибо большое,

ответ

1

То, что вы пытаетесь сделать, это довольно большое нарушение всех MVVM о, но можно ...

С помощью следующих строк в коде вашей точки зрения, вы можете ...

... доступ к строке ресурса:

var scanName = this.Resources["scanName"]; 

... доступ к ViewModel:

var vm = DataContext as MyViewModel; 
if (vm == null) return; 
vm.ScanHistory.Add(scanName); 

Это, как говорится, вы действительно не должны этого делать. Идея MVVM состоит в том, чтобы полностью отключить ViewModel и View и позволить механизмам привязки WPF подключить их для вас. В вашем случае, насколько я могу судить, вы должны сохранить имя сканирования где-то в другом месте, либо в качестве ресурса, либо в качестве значения конфигурации, вывести его в свой ViewModel и предоставить свойство на ViewModel, к которому может привязываться ваш просмотр.

+0

:) Большое нарушение, мне просто попросили попробовать этот подход моим боссом :( Как бы то ни было, как добавить строку scanName в существующий список коллекции Observable в моей модели просмотра (Scanhistory - это имя списка) Прошу прощения за вопросы, я действительно новичок в разработке C# и Windows. Еще раз спасибо. – JennyJane

+0

@JennyJane: Я немного обновил свой ответ: Чтобы добавить элемент в список на ViewModel, вам нужно проанализировать DataContext вашего вида к типу ViewModel, а затем вы можете получить доступ к свойству ... (vm.ScanHistory.Add (...)); – Marc

+0

@JennyJane: если это работает для вас, пожалуйста, отметьте и отметьте как ответ. Спасибо! – Marc

1

Я не рядом приложение WinPhone так я сделать простой пример на МОФ (это с WinPhone похож).

// Записывает значение строки из динамического ресурса в TextBlock

<TextBlock FontSize="14" Text="{DynamicResource scanName}"/> 

// изменение ресурса в коде (this этого окно в моем примере)

this.Resources["scanName"] = "new value"; 

Как мой взгляд, вы сценарий является Верой конкретного Попробуйте прочитать о привязках. Может быть, привязки будут более полезными в вашем сценарии.