【问题标题】:MVVMCross notify ViewModel of change in Model propertyMVVMCross 通知 ViewModel Model 属性的变化
【发布时间】: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,因为更新后的模型需要传递给另一个模型进行处理。

标签: c# wpf mvvm mvvmcross


【解决方案1】:

RaisePropertyChanged(() => oc); 所做的只是通知 WallModel 的属性 oc 发生了变化。同时,ViewModel 上的 WallModel 仍然持有与 WallModel 相同的对象,因此它假定没有任何变化。

尝试按照this 指南获取通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多