Привязка к свойству экземпляра класса или изменение свойств из кода - PullRequest
0 голосов
/ 25 июня 2010

У меня были проблемы с привязкой данных в WPF.У меня есть класс для хранения различных данных.Я хочу, чтобы данные, которые он содержит, были связаны с текстовыми полями в другом окне.Все, что я нашел, рекомендует это:

<Grid.Resources>
    <c:PropertyModel x:Key="propMod" />
</Grid.Resources>
<Grid.DataContext>
    <Binding Source="{StaticResource propMod}"/>
</Grid.DataContext>

Проблема с этим в том, что он где-то создан, и у меня нет возможности добраться до этого «propMod».Я хотел бы изменить некоторые свойства propMod из кода.

Другой метод, который я пробовал, - создать экземпляр в выделенном фрагменте кода, например,

PropertyModel propMod = new PropertyModel();

Но я могуне заставляет WPF связываться с этим, несмотря на документацию, утверждающую, что {Binding propMod.PropA} должен работать.

Спасибо

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Вы должны быть в состоянии использовать подход кода - но вам нужно будет явно установить DataContext Grid в вашей новой экземплярной переменной "propMod".

Если вы хотите использовать первый подход, вы можете получить доступ к ресурсу из кода. Вам нужно найти сетку, затем выполните:

Grid grid = MethodToGetTheGridInstance();
PropertyModel propMod = (PropertyModel)grid.FindResource("propMod");

Подробнее о получении ресурсов из кода см. MSDN .

1 голос
/ 25 июня 2010

Главное, что вам нужно, это установить для DataContext (вашего Window, Grid и т. Д.) Экземпляр вашей PropertyModel.

Часто я делаю это в выделенном коде View следующим образом:

var viewModel = new SomeAwesomeViewModel();
DataContext = viewModel;

Это может быть в конструкторе или в обработчике события для события Loaded окна.

Если вы хотите иметь возможность манипулировать некоторыми свойствами ViewModel из какого-то другого кода, то, возможно, вам следует создать экземпляр ViewModel где-то еще (например, внутри другой ViewModel, которая знает, какие модификации необходимо выполнить), а затем передать экземпляр и изменил ViewModel для просмотра. Я сделал нечто подобное с помощью события и пользовательского параметра EventArgs, который содержал ViewModel.

...