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 に答える