【发布时间】:2017-05-11 21:05:34
【问题描述】:
我对 WPF 相当陌生。我的理解是模型中的数据发生变化,它应该通知视图模型,并且视图将绑定到视图模型中的属性和类似的东西。它是否正确?如果是这样,我一直在阅读该模型应该实现INotifyPropertyChanged,并且看起来像这样
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”,它应该从模型属性“Authenticated”中获取更新
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();
}
【问题讨论】:
标签: wpf mvvm model notifications viewmodel