INotifyPropertyChanged没有通知datatrigger

时间:2012-11-22 18:50:08

标签: c# wpf

我在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));
        }
    }

1 个答案:

答案 0 :(得分:1)

准备射击队:(

在创建windowB并将其绑定到“相同”视图模型时,我正在实例化一个新实例。

public WindowBView()
    {
        InitializeComponent();
        DataContext = new WindowABViewModel();
    }

而不是使用现有的。

我为浪费每个人的时间而道歉。请一心一意。