如何将模型更改通知给MVVM中的ViewModel?

编程入门 行业动态 更新时间:2024-10-09 03:29:05
本文介绍了如何将模型更改通知给MVVM中的ViewModel?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

就像我们通过INotifyPropertyChanged通知View有关ViewModel成员发生的更改一样,将模型中的更改通知给ViewModel的常规方法是什么?

解决方案

您也可以为模型实现 INotifyPropertyChanged 界面。

感谢Shmuel Zang的回复。 我在模型中实现了INotifyPropertyChanged,并在我的ViewModel中订阅了模型的PropertyChanged事件。有用。 我们知道通过应用[CallerMemberName]属性(在OnPropertyChanged()中使用),我们避免重命名重构不会更改字符串值问题。我想知道有没有像[CallerMemberName]属性这样的机制来避免同样的问题(重命名重构不会改变字符串值),这可能发生在我的ViewModel中的myModel_PropertyChanged()事件处理程序中? (代码中的exaclty:if(e.PropertyName ==MyFirstName)) 这是我的代码:

内部 class 模型:INotifyPropertyChanged { public Model() {} string _FirstName = Shahir; public string FirstName { get { return _FirstName; } set { _FirstName = value ; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged ; private void OnPropertyChanged([CallerMemberName] string propertyName = ) { if (PropertyChanged!= null ) { PropertyChanged(此, new PropertyChangedEventArgs(propertyName)); } } }

internal class MyViewModel:INotifyPropertyChanged { private 模型myModel; public MyViewModel(模型型号) { this .myModel = model; myModel.PropertyChanged + = myModel_PropertyChanged; } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string propertyName = ) { if (PropertyChanged!= null ) { PropertyChanged(此, new PropertyChangedEventArgs(propertyName)); } } string _FirstName; public string MyFirstName { get { return myModel.FirstName; } set { _FirstName = value ; OnPropertyChanged(); } } 私有 void myModel_PropertyChanged( object sender,System.ComponentModel.PropertyChangedEventArgs e) { if (e .PropertyName == FirstName) { MyFirstName = myModel.FirstName ; } } }

Like we notify the View about the changes happened to the ViewModel members with INotifyPropertyChanged, what is the normal way to notify the changes in the Model to the ViewModel?

解决方案

You can implement the INotifyPropertyChanged interface also for the model.

Thanks Shmuel Zang for your reply. I have implemented the INotifyPropertyChanged in the model and subscribed the PropertyChanged event of the model in my ViewModel. It works. As we know that by applying [CallerMemberName] attribute (used in OnPropertyChanged()), we avoid the "Rename Refactoring doesn't change the String values" problem. I would like to know that is there any mechanism like [CallerMemberName] attribute to avoid the same problem ("Rename Refactoring doesn't change the String values") which may happen in the myModel_PropertyChanged() event handler in my ViewModel? (exaclty here in the code: if (e.PropertyName == "MyFirstName")) Here is my code:

internal class Model:INotifyPropertyChanged { public Model() { } string _FirstName = "Shahir"; public string FirstName { get { return _FirstName; } set { _FirstName = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string propertyName = "") { if(PropertyChanged!=null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }

internal class MyViewModel:INotifyPropertyChanged { private Model myModel; public MyViewModel(Model model) { this.myModel = model; myModel.PropertyChanged += myModel_PropertyChanged; } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string propertyName = "") { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } string _FirstName; public string MyFirstName { get { return myModel.FirstName; } set { _FirstName = value; OnPropertyChanged(); } } private void myModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "FirstName") { MyFirstName = myModel.FirstName; } } }

更多推荐

如何将模型更改通知给MVVM中的ViewModel?

本文发布于:2023-11-28 03:42:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1640819.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何将   模型   通知   ViewModel   MVVM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!