c# - View 模型继承和重复模型引用

标签 c# wpf inheritance mvvm viewmodel

我的问题是:如何管理 View 模型的继承链?

我的情况:

我有一个标准 查看模型库 它只实现了 INotifyPropertyChanged 接口(interface)。

此外,我有一个 业务对象 View 模型 它有一个 Guid,一个 PersonBaseViewModel 其中有个人核心数据,一个客户 View 型号 与客户相关的东西和 员工查看模型 与员工相关的东西。

所有的 View 模型都封装了一个模型对象(Customer、Employee、PersonBase)。

  • BusinessObjectViewModel 继承自 ViewModelBase
  • PersonBaseViewModel 继承自 BusinessObjectViewModel
  • CustomerViewModel 继承自 PersonBaseViewModel
  • EmployeeViewModel 继承自 PersonBaseViewModel

  • 模型通过构造函数进入 View 模型。

    如果我使用构造函数链(每个 View 模型都调用基本构造函数),每个 View 模型都有它的模型来从模型返回封装的值。

    但是我必须在每个 View 模型中都有一个模型属性。在 CustomerViewModel 的情况下,我会在 中有一个引用。客户 View 型号 ,一个在 PersonBaseViewModel 中,一个在 中业务对象 View 模型 对于同一个对象。这对我来说听起来很愚蠢。

    或者我必须在上层 View 模型中转换每个属性访问。

    p.s.这只是我模型层次结构的一小部分。

    提前致谢。

    最佳答案

    IMO 最简单的答案是使用泛型,这可能很简单

    public abstract class ViewModelBase<TModel>  TModel : class{
        public TModel Model { get; protected set; }
    }
    

    .net 类型系统将知道您的 TModel 是 Person、Customer 或其他任何内容,无需强制转换。

    让我知道您是否需要更多或是否想发布一些需要帮助的代码。是的,一开始要让你的父类(super class)型层次结构恰到好处可能会很棘手。

    高温下,
    绿柱石

    关于c# - View 模型继承和重复模型引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723922/

    相关文章:

    Javascript 私有(private)/公共(public)继承语法

    java - 如果子类构造函数调用的参数结构与其父类(super class)构造函数不匹配,会发生什么

    c++ - 从基类指针调用 C++ 中的私有(private)函数

    c# - ASP.NET MVC 5 - JSON - (动态?)模型绑定(bind) - REST 服务 - Webhooks - Chargebee

    c# - 我应该在共享主机上加密 web.config 吗?

    c# - 定义跟踪源时,App Config 不支持属性 Tracemode

    c# - UserControl 属性的默认值

    c# - 动态双向绑定(bind)到 wpf 中的动态元素

    c# - 请求被中止无法创建 SSL/TLS 安全通道 webClient C#

    c# - 如何使用 CommandManager 并且仍然能够手动触发 ICommand.CanExecuteChanged 事件,即明确地?