我是WPF的新手。我的理解是模型中的数据发生了变化,它应该通知视图模型,视图将绑定到视图模型中的属性和事物。它是否正确?如果是这样,我一直在读,该模型应该实现INotifyPropertyChanged
,并且是这个样子从模型中更新ViewModel属性的正确方法
public class LoginModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
public bool Authenticated { get; set; }
}
,并在我的ViewModel,我有一个属性“AuthResult”,即应该从Model属性得到更新“身份验证“
public partial class view1 : UserControl, INotifyPropertyChanged{
public bool AuthResult
{
get
{
return _authVal;
}
set
{
_authVal = value;
NotifyPropertyChanged("AuthResult");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
我知道这个当前的实现是不正确的。我发现,我应该从我的模型订阅到的PropertyChanged通知如下所示:
LoginModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(LoginModel_PropertyChanged);
void LoginModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == "Authenticated")
{
//do something
}
}
我看不出这里的“AuthResult”属性应该被更新。我会在If语句中做些什么,如AuthResult = _model.Authenticated;
?
编辑:
和在我的构造?
LoginModel _model;
public view1(LoginModel model)
{
_model = model;
InitializeComponent();
}
这个答案最终回答了我的问题,再次感谢mm8。 – ganjeii
第二个选项不是MVVM - 它是“Facade” – Fabio