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 属性的变化的主要内容,如果未能解决你的问题,请参考以下文章

MvvmCross ViewModel启动方法异步行为澄清

Xamarin iOS - MVVMCross:无法使用 ViewModel 中的命令连接自定义单元格中的按钮

PCL中的MVVMCross异步和等待方法

为 MvxTabViewController 托管和初始化多个 MVVMCross ViewModel

Mvvmcross - 从常规活动中显示 mvvmcross 视图模型

通过 httpclient mvvmcross 发布 Json