【发布时间】:2013-01-15 09:10:45
【问题描述】:
我有一个 UserControl,它包含布尔属性 A。 在包含该 UserControl 的主窗口中,我必须启用/禁用按钮取决于 A 的值。 我试图将 A 设为公共和绑定按钮,如下所示:
<Button IsEnabled="{Binding MyUserControl.A}"/>
在 UserControl 中,我为 Property A 设置了 PropertyChangedEventHandler,如下所示:
private bool _a;
public bool A
{
get
{
return _a;
}
set
{
if (_a == value)
return
_a = value;
OnPropertyChanged("A");
}
}
看起来不错。但我不知道为什么它不起作用。 似乎我缺乏一些实现来在主窗口与其用户控件之间进行通信(因为使用 OnPropertyChanged,用户控件内的所有绑定都可以正常工作)。
我有一些解决方案是 1.使用Messenger从Usercontrol发送消息,内容为A,主控件将捕获并设置按钮的IsEnabled值。 2. 创建一个事件并在 A 的值发生变化时引发它。
您对这个问题以及如何解决它有任何想法吗? 您认为以下 2 种解决方案效果如何,或者您有其他建议吗?
感谢阅读。
> 这个问题解决了。在代码隐藏中设置用户控件的数据上下文时是我的错误,并且不承认我已经在数据模板中设置了它们。 --> 所以,复制使用户控件的视图模型初始化了 2 次。 --> 不知何故,它使 NotifyPropertyChange 无法正常工作。
对不起,这个问题的标题不适合这个愚蠢的错误。看来我采取了正确的方法来解决标题问题。 感谢您的阅读和建议。
【问题讨论】:
-
您是否尝试将您的
A属性定义为依赖属性? -
绑定有效吗?您可以设置跟踪级别 (IsEnabled="{Binding MyUserControl.A, PresentationTraceSources.TraceLevel=High}") 以检查绑定是否有效
-
@Alexander Balte:对不起,你能解释一下吗?
-
@rhe1980:是的,绑定效果很好,我没有发现与输出窗口绑定相关的错误。
-
@kidgu:您的用户控件(MyUserControl)在哪里实例化?在 xaml 中还是在后面的代码中?我试过了,效果很好。