如何通知视图属性已更改?

时间:2012-06-09 05:11:42

标签: windows-phone-7 inotifypropertychanged

我有一个PopUp控件,其IsOpen属性绑定到ViewModel中一个名为IsOpen的属性,它实现了INotifyPropertyChanged,我希望PopUp控件根据ViewModel的IsOpen值自动关闭或打开,我使用MVVM patterm,代码如下:

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的一个实例

Popup x:Name =“popUp”IsOpen =“{Binding Main.IsOpen}”

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

1 个答案:

答案 0 :(得分: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();
}
}