2

我有一个 PopUp 控件,其 IsOpen 属性绑定到实现 INotifyPropertyChanged 的​​ ViewModel 中名为 IsOpen 的属性,我希望 PopUp 控件根据 ViewModel 的 IsOpen 值自动关闭或打开,我使用 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");
            }
        }
    }

}

视图中的代码://Main是下面MainViewModel的一个实例

弹出窗口 x:Name="popUp" IsOpen="{Binding Main.IsOpen}"

当然,ViewModel 中有一个方法用于更改 IsOpen 属性,我可以清楚地看到它的更改,但它没有通知视图,我错过了什么吗?提前谢谢。

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 回答