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