У меня есть две загрузки UserControls (uc1 и uc2) в третий UserControl (shell). Shell имеет два свойства, uc1 и UC2, типа UserControl1 и UserControl2, и каждый имеют DependencyProperty прописал их собственных классов называется IsDirty:WPF - уведомление об изменении свойства от UserControl
public static readonly DependencyProperty IsDirtyProperty = DependencyProperty.Register("IsDirty", typeof (bool), typeof (UserControl1));
public bool IsDirty
{
get { return (bool) GetValue(IsDirtyProperty); }
set { SetValue(IsDirtyProperty, value); }
}
(тот же код для UserControl2)
Shell имеет TextBlocks связаны со свойствами IsDirty:
<TextBlock Text="{Binding ElementName=shell, Path=Uc1.IsDirty}"/>
<TextBlock Text="{Binding ElementName=shell, Path=Uc2.IsDirty}"/>
при изменении значения IsDirty в Uc1 и UC2, Shell никогда не получает уведомление. Что мне не хватает? UserControl является потомком DependencyObject ...
Такое же поведение возникает, если у меня есть регулярные свойства, уведомляющие изменения через INotifyPropertyChanged.
Если я поднимаю маршрутизируемое событие из uc1 и uc2, пузырясь до Shell, тогда я могу поймать грязное значение, и все работает, но я не должен этого делать, должен ли я?
Благодаря
Edit: Ответ заключается в повышении свойств измененного события на свойствах uc1 и UC2 или сделать их DPs.
Ваш оператор привязки предполагает, что у Shell есть два свойства: «Uc1» и «Uc2». Это верно? Или «Uc1» и «Uc2» - только экземпляры UserControls, которые добавляются в XAML от Shell? – ASanch
Да, это правильно. Shell имеет два свойства: uc1 и uc2 типов UserControl1 и UserControl2 соответственно. Я обновлю эту информацию. –
Хорошо. Еще один вопрос: почему определение DependencyProperty выше названо «SecondDirtyProperty»? Правильно это или должно быть «IsDirtyProperty»? – ASanch