1

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

1 回答 1

1

准备行刑队:(

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

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

而不是使用现有的。

我为浪费大家的时间而道歉。请单枪击中心脏。

于 2012-11-22T20:24:28.510 回答