MVVMCross 通知 ViewModel Model 属性的变化
Posted
技术标签:
【中文标题】MVVMCross 通知 ViewModel Model 属性的变化【英文标题】:MVVMCross notify ViewModel of change in Model property 【发布时间】:2021-11-09 12:14:55 【问题描述】:我是 MVVM 模式的新手,因此是 MVVMCross 的新手。但我似乎无法弄清楚如何通知 ViewModel 模型属性的更改。也许我理解错误的模式并使用了错误的架构?
这是我的模型类:
public class WallModel: MvxNotifyPropertyChanged
private double _oc;
public double oc
get return _oc;
set
_oc = value;
RaisePropertyChanged(() => oc);
在我的 ViewModel 中,我有 WallModel 类的以下属性:
private WallModel _wallModel = new WallModel();
public WallModel wallModel
get return _wallModel;
set
SetProperty(ref _wallModel, value);
我可以很好地从模型中检索数据,所以问题不在于绑定。
当前发生的情况是模型中 oc 属性的 set
正在触发,但 ViewModels set
没有被触发。
我希望发生的是 RaisePropertyChanged(() => oc);
会导致 ViewModles set
触发,但它不会。
RaisePropertyChanged(() => oc);
会做什么呢?
我是否误解了 MVVM 模型,我应该更改我的架构吗?**
如何获得所需的行为?
我曾尝试手动实现INotifyPropertyChanged
,但这并不能解决
【问题讨论】:
目前发生的情况是模型中的 oc 属性集正在触发,但 ViewModels 集没有被触发。 为什么会这样?您没有在ViewModel
中更改wallModel
... 为什么需要这个?绑定应该可以正常工作......如果你需要这个,那么你应该注册INotifyPropertyChanged
更改ViewModel
..._wallModel.PropertyChanged += (o, e) => /* do whatever you want ... */
需要通知 ViewModel,因为更新后的模型需要传递给另一个模型进行处理。
【参考方案1】:
RaisePropertyChanged(() => oc);
所做的只是通知仅 WallModel 的属性 oc 发生了变化。同时,ViewModel 上的 WallModel 仍然持有与 WallModel 相同的对象,因此它假定没有任何变化。
尝试按照this 指南获取通知。
【讨论】:
以上是关于MVVMCross 通知 ViewModel Model 属性的变化的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin iOS - MVVMCross:无法使用 ViewModel 中的命令连接自定义单元格中的按钮
为 MvxTabViewController 托管和初始化多个 MVVMCross ViewModel