我有以下方式设置类结构 - 当Model的属性被更改时,不会调用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
{
}
答案 0 :(得分:7)
我认为没有任何简单的方法。
您可以更改模型,使其支持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是Model of the View
- 可以将属性值复制到Model对象中,也可以从Model对象复制。