C# 子属性更改时触发RaisePropertyChanged-MvvmCross

C# 子属性更改时触发RaisePropertyChanged-MvvmCross,c#,mvvm,mvvmcross,C#,Mvvm,Mvvmcross,我以下面的方式设置了一个类结构-当模型的属性更改时,不调用RaisePropertyChanged事件。这有什么问题吗?或者我需要在ViewModel中展平复杂的属性吗 Class ViewModel { public Model model { get { return _Service.GetModel();} set { _Service.SetModel(); RaisePropertyChanged(()

我以下面的方式设置了一个类结构-当模型的属性更改时,不调用RaisePropertyChanged事件。这有什么问题吗?或者我需要在ViewModel中展平复杂的属性吗

Class ViewModel
{
   public Model model {
                   get { return _Service.GetModel();}
                   set { _Service.SetModel(); RaisePropertyChanged(() => Model);
                  }
} 

class Model
{
   public string A {get;set;}
}

Class Service
{

}

我认为没有任何简单的方法可以解决这个问题


您可以更改模型,使其支持
INotifyPropertyChanged
-例如

class Model : MvxNotifyPropertyChanged
{
   public string A { 
        get { return _a; } 
        set { _a = value; RaisePropertyChanged(() => A); }
   }
}
我在使用stackoverflow库时使用了第一种方法,该库具有如下模型实体


。。。或者,您可以使用另一个
INotifyPropertyChanged
类包装您的模型:

class ModelWrapper : MvxNotifyPropertyChanged
{
   private readonly Model _m;
   public ModelWrapper(Model m) 
    { _m = m; }

   public string A { 
        get { return _m.A; } 
        set { _m.A = value; RaisePropertyChanged(() => A); }
   }
}
我在对模型类没有任何控制权的情况下使用了这种方法——当模型类交给我时


。。。或者,作为该方法的扩展,可以将特性展平到父ViewModel:

class MyViewModel : MvxViewModel
{
   private readonly Model _m;
   public ModelWrapper(Model m) 
    { _m = m; }

   public string A { 
        get { return _m.A; } 
        set { _m.A = value; RaisePropertyChanged(() => A); }
   }
}
我只在有几个属性需要担心时才使用这种方法



总的来说。。。请记住,ViewModel将存在视图的
模型
-可以将属性值复制到模型对象或从模型对象复制属性值。

您的意思是当模型实例的属性
a
发生更改时,
模型
RaisePropertyChanged
不会被触发?谢谢Stuart!我希望能有一颗神奇的MvvmCross银弹来解决这个问题!:)如果只是语法妨碍了,那么就考虑Fodi--或者Rio。