我有一个 UserControl,它包含 bool 属性 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 工作不正确。
对不起,这个问题的标题不适合这个愚蠢的错误。看来我采取了正确的方法来解决标题问题。感谢您的阅读和建议。