我按以下方式设置了类结构 - 当模型的属性更改时,不会调用 RaisePropertyChanged 事件。无论如何,我是否需要展平 ViewModel 中的 Complex 属性?
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 库时,我使用了第一种方法 - 它具有像 http://stacky.codeplex.com/SourceControl/latest#trunk/source/Stacky/Entities/Answer.cs 这样的模型实体
...或者您可以使用另一个 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); }
}
}
当我对 Model 类没有任何控制权时,我使用了这种方法 - 当它被提供给我时。
...或者作为该方法的扩展,您可以将属性扁平化为父 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 是一个 View 模型
- 可以将属性值复制到 Model 对象或从 Model 对象复制属性值。
关于c# - 子属性更改时触发 RaisePropertyChanged - MvvmCross,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19061072/