我有一个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属性,我可以清楚地看到它的变化,但是它没有通知视图,我是否错过了什么?提前感谢。
答案 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();
}
}