【发布时间】:2010-05-17 10:32:16
【问题描述】:
我有两个用户控件(“UserControlParentView”和“UserControlChildView”)在两个控件中都实现了 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>
所以当用户切换/取消切换按钮时,子控件中的属性应该被更新。 子控件包含要从父控件更新的布尔属性,但什么也没发生!断点从未触发!
应该从父控件更新的 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));
所以问题是 - 我做错了什么?为什么孩子的属性永远不会更新?顺便说一句 - 输出窗口中没有任何绑定错误警告...
【问题讨论】:
-
UserControlChildView 有 DataContext 吗?
-
Yes.... 请原谅 - UserControl 本身 - 还没有 - 在子控件的构造函数中:this.LayoutRoot.DataContext = this;这是因为很少有内部用户控件应该绑定到用户控件中的某些属性。例如。 Child 用户控件也有这样的属性: public string ButtonText { get { return localDataContext.ButtonText; } 设置 { localDataContext.ButtonText = 值; NotifyPropertyChanged("ButtonText");它用于内部按钮(在子控件内),如下所示:
-
对非格式化文本感到抱歉 - 无法弄清楚如何修复它:(
-
查看标签列表下的“编辑”链接,使用它为您的问题添加额外的代码,而不是使用评论。这样,它将以更易读的格式显示。
标签: silverlight binding parent