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

标签 c# mvvm mvvmcross

我按以下方式设置了类结构 - 当模型的属性更改时,不会调用 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/

相关文章:

c# - 如何从 WCF 操作契约(Contract)中检索客户端的机器名称?

c# - GZipStream 有效性

mvvm - DomainDataSource和ViewModel,可以一起使用吗?

c# - 对可以有两种 View 模型模式的一个 View 的建议

android - 用于 LinearLayout Gravity 的 Droid ValueConverter

c# - 正确打印二维数组?

C# 找不到类型或命名空间 'Core'。 CS0246

c# - PRISM 5 MEF AvalonDock 2.0 DataAdapter 注册 View 和父项已选定

c# - MvxTabBarViewController 作为第一个 ViewController 没有出现

xamarin - 我可以根据条件从Ios调用MVVM交叉命令方法吗?