私はかなり初心者です。モデルのデータが変更され、ビューモデルに通知する必要があり、ビューはビューモデル内のプロパティと物に似ています。これは正しいです?もしそうなら、私はモデルが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」、それが「モデルプロパティからアップデートを取得する必要があります
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通知に加入する必要があることを発見しました:「AuthResult」プロパティが更新されなければならないところ、私は表示されません
LoginModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(LoginModel_PropertyChanged);
void LoginModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == "Authenticated")
{
//do something
}
}
。私はAuthResult = _model.Authenticated;
のようなIfステートメントで何かしますか?
EDITED:
と私のコンストラクタでは?
LoginModel _model;
public view1(LoginModel model)
{
_model = model;
InitializeComponent();
}
この回答は最終的に私の質問に答えた、ありがとう再びmm8。 – ganjeii
2番目のオプションはMVVMではなく、 "Facade" – Fabio