У меня есть два UserControls («UserControlParentView» и «UserControlChildView») с шаблоном MVVM, реализованным в обоих элементах управления. Родительский контроль - это контейнер для Child control, а свойство child control должно быть обновлено привязкой данных из Parent control, чтобы показать/скрыть некоторую флажку внутри Child control.Данные привязки Silverlight к свойствам родительского пользовательского элемента управления с использованием MVVM в обоих элемента управления
Родительский контроль Описание
UserControlParentViewModel обладает свойством:
private bool isShowCheckbox = false;
public bool IsShowCheckbox
{
get { return isShowCheckbox; }
set { isShowCheckbox = value; NotifyPropertyChanged("IsShowCheckbox"); }
}
UserControlParentViewModel - как я установил DataContext управления Родитель:
public UserControlParentView()
{
InitializeComponent();
this.DataContext = new UserControlParentViewModel();
}
UserControlParentView содержит кнопку переключения (в XAML), связанный с свойством UserControlParentViewModel IsShowCheckbox
<ToggleButton Grid.Column="1" IsChecked="{Binding IsShowCheckbox, Mode=TwoWay}"></ToggleButton>
Также родительский контроль содержит экземпляр дочернего элемента (где-то в XAML)
<local:UserControlChildView IsCheckBoxVisible="{Binding IsShowCheckbox}" ></local:UserControlChildView>
так собственности в дочернем элементе управления должны обновляться при нажатии кнопки пользователь togggle/untoggle. Детский контроль содержит Boolean свойство, которое должно быть обновлено от родительского элемента управления, но ничего не произошло! Точка прерывания никогда не срабатывала!
Недвижимость в UserControlChildView, которые должны быть обновлены из-под контроля родителей (здесь я планирую сделать chechBox видимым/скрытый в код):
public bool IsCheckBoxVisible
{
get { return (bool)GetValue(IsCheckBoxVisibleProperty); }
set { SetValue(IsCheckBoxVisibleProperty, value); }
}
// Using a DependencyProperty as the backing store for IsCheckBoxVisible. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsCheckBoxVisibleProperty =
DependencyProperty.Register("IsCheckBoxVisible", typeof(bool), typeof(TopMenuButton), new PropertyMetadata(false));
Так что вопрос - что я делаю не так? Почему детская собственность никогда не обновляется? BTW - нет каких-либо обязательных предупреждений об ошибках в окне вывода ...
ли UserControlChildView иметь DataContext? –
Да .... Pardon - UserControl сам - еще нет - в конструкторе Child control: this.LayoutRoot.DataContext = this; Это связано с тем, что некоторые внутренние элементы управления пользователями должны связываться с некоторыми свойствами в пользовательском управлении. Например. пользовательский элемент Child также имеет такое свойство: public string ButtonText { get {return localDataContext.ButtonText; } set {localDataContext.ButtonText = значение; NotifyPropertyChanged ("ButtonText"); }} и используется во внутренней кнопки (в элементе управления Child), например: – MagicMax
извините за не отформатированный текст - не может понять, как исправить это :( – MagicMax