2

IsOpen プロパティが、INotifyPropertyChanged を実現する ViewModel の IsOpen という名前のプロパティにバインドされている PopUp コントロールを持っています。ViewModel の IsOpen の値に応じて、PopUp コントロールを自動的に閉じたり開いたりしたいです。MVVM パターンを使用します。コードは次のとおりです。

ViewModel のコード:

public class MainViewModel : ViewModelBase
{

    private  bool _isOpen;
    public bool IsOpen
    {
        get
        {

            return this._isOpen;
        }

        set
        {
            if (this._isOpen != value)
            {
                this._isOpen = value;
                RaisePropertyChanged("IsOpen");
            }
        }
    }

}

View 内のコード: //Main は以下の MainViewModel のインスタンスです

ポップアップ x:Name="popUp" IsOpen="{Binding Main.IsOpen}"

もちろん、IsOpen プロパティを変更するために使用される ViewModel のメソッドがあります。その変更を明確に確認できますが、ビューには通知されません。

4

1 に答える 1

1

そのポップアップ用のユーザー コントロールと、そのコントロール用の VM を作成します。次に、そのユーザー コントロールと VM のインスタンスを作成し、メイン ビュー モデルから表示します。このようにして、ポップアップのビューモデルも制御できます。

ただし、基本的なポップアップウィンドウだけを表示したい場合、このソリューションは過剰設計です。

public class Popup: UserControl
{

     public Popup(PopupVM model)
     {
         this.DataContext = model;
     }
}

public class PopupVM
{
...
}

public class MainViewModel : ViewModelBase
{
....

// Called with an IAction
private void ShowPopup()
{
   PopupVM model = new PopupVM();
   this.popup = new Popup(model); // Control is a field in this VM.
   popup.Show();
}

private void ClosePopup()
{
    // Gather some info if you want
    this.popup.Close();
}
}
于 2012-06-09T05:25:33.600 に答える