我在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,但数据触发器永远不会应用。
我的阅读相当广泛,但似乎无法找到这种方法的逻辑错误?
@Warlock
在视图模型中:
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));
}
}
答案 0 :(得分:1)
准备射击队:(
在创建windowB并将其绑定到“相同”视图模型时,我正在实例化一个新实例。
public WindowBView()
{
InitializeComponent();
DataContext = new WindowABViewModel();
}
而不是使用现有的。
我为浪费每个人的时间而道歉。请一心一意。