我在 windowA 中有一个按钮,它打开一个 windowB 并更改样式以显示 windowB 已打开。当我关闭 windowB 时,我想将按钮样式改回来。两个窗口使用相同的视图模型。
在视图模型中,我使用 INotifyPropertyChanged 来检测属性 IsWindowBOpen 并使用它来更改按钮样式,如下所示:
<ei:DataTrigger Binding="{Binding IsWindowBOpen}" Value="True">
<ei:GoToStateAction TargetName="myButton" StateName="IsOpen"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding IsWindowBOpen}" Value="False">
<ei:GoToStateAction TargetName="myButton" StateName="IsClose"/>
</ei:DataTrigger>
打开 WindowB 时,我在视图模型中将属性 IsWindowBOpen 更改为 true。属性更改事件触发显示为 true 并且数据触发器适用。
当我关闭 WindowB 时,我在视图模型中将属性 IsWindowBOpen 更改为 false。属性更改事件触发显示为 false,但数据触发器从不应用。
我已经阅读了相当广泛的内容,但似乎找不到这种方法的逻辑错误?
@术士
在视图模型中:
private bool _isWindowBOpen;
public bool IsWindowBOpen
{
get { return _isWindowBOpen}
set
{
_isWindowBOpen = value;
OnPropertyChanged("IsWindowBOpen");
}
}
private void DoClose(object param)
{
switch (type)
{
case "WindowB":
IsWindowBOpen = false;
break;
}
main.Items.Remove(windowB);
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
var test = IsWindowBOpen; //Gets set to True/False accordingly
handler(this, new PropertyChangedEventArgs(name));
}
}