Установка DataContext делает PropertyChanged нулевым в UserControl - PullRequest
0 голосов
/ 04 августа 2011

У меня есть приложение WPF, которое использует пользовательский элемент управления WPF.

Пользовательский элемент управления предоставляет свойство DependencyProperty, к которому я хотел бы привязаться в своем приложении WPF.

Пока мой пользовательский элемент управления не устанавливает свой собственный DataContext, это работает, и я могу прослушивать изменения в DependencyProperty.

Однако в тот момент, когда я установил DataContext, вызываемый PropertyChanged, становится пустым.

Что мне здесь не хватает?

Пример кода: https://skydrive.live.com/redir.aspx?cid=367c25322257cfda&page=play&resid=367C25322257CFDA!184

Ответы [ 3 ]

0 голосов
/ 05 августа 2011

Рассмотрите возможность установки DataContext на один из элементов, содержащихся в UserControl, а не на сам UserControl.

0 голосов
/ 06 августа 2011

Спасибо за ввод и уточнение деталей.

Подумав немного, я выбрал легкий путь и удалил ViewModel из элемента управления. MVVM для приложения, но нет MVVM для пользовательского элемента управления.

Таким образом, я не использую никаких привязок в пользовательском элементе управления, вместо этого использую свойства зависимости, которые связаны с основным приложением.

0 голосов
/ 05 августа 2011

DependencyProperty имеет свойство наследования, поэтому, если вы не установите DataContext UserControlDP, DataContext наследуется от DataContext MainWindow.В этом случае DataContext UserControlDP в приведенном ниже коде устанавливается как MainWindow_ViewModel.Таким образом, привязка выполняется правильно.

<usercontrol:UserControlDP Width="200" Height="100"
    TestValue="{Binding TestValueApp, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"
    Margin="152,54,151,157"></usercontrol:UserControlDP>

В другом случае DataContext UserControlDP устанавливается как UserControlDP_ViewModel, поэтому привязка нарушается.Вы можете увидеть первое сообщение об исключении как следующее в окне отладки.

System.Windows.Data Error: 40 : BindingExpression path error: 'TestValueApp' property not found on 'object' ''UserControlDP_ViewModel' (HashCode=24672987)'. BindingExpression:Path=TestValueApp; DataItem='UserControlDP_ViewModel' (HashCode=24672987); target element is 'UserControlDP' (Name=''); target property is 'TestValue' (type 'Object')
...