对不起,标题令人困惑。我不确定如何实现从基类派生的ViewModels和Models。

我的ViewModel类基于ViewModelBase,ViewModelBase拥有一个ModelBase,该ModelBase作为所有其他模型的基类。

每个ViewModel都有一个“Model”属性,但是,由于Model属性是由基本ViewModel类定义为ModelBase类,因此,我总是必须创建另一个将Model强制转换的属性-从ModelBase到相关的Model类。

我的问题是-有没有更简单的解决方案?是否存在与这些问题相关的设计模式?

这是一个代码示例:

public abstract class BasicViewModel : ViewModelBase
{
    public BasicViewModel()
    {
    }
    public ModelBase Model { get; set; }
}

public class ModelBase
{
}

public class ContainableViewModel : BasicViewModel
{
    public ContainableViewModel(ContainableModel model)
    {
        this.Model = model;
    }

    public ContainableModel MyModel { get { return (ContainableModel)Model; } }

    public int Children { get { return MyModel.Children; } set { MyModel.Children = value; } }
}

public class ContainableModel : ModelBase
{
    public ContainableModel()
    {
        Children = 2;
    }

    public int Children { get; set; }
}

如您所见,“MyModel”属性使我很烦。

非常感谢您的帮助和时间!

最佳答案

如果每个 View 模型都包含Model属性,则可以使用泛型:

public abstract class BasicViewModel<TModelType> : ViewModelBase
    where TModelType : ModelBase
{
    public BasicViewModel(TModelType model)
    {
        Model = model;
    }

    public TModelType Model { get; set; }
}

public class ModelBase
{
}

现在,您的可包含 View 模型定义如下:
public class ContainableViewModel : BasicViewModel<ContainableModel>
{
    public ContainableViewModel(ContainableModel model)
        : base(model)
    {
    }

    // you can now omit this method, it is defined on the abstract superclass
    //public ContainableModel Model { get { return ()Model; } }

    public int Children { get { return MyModel.Children; } set { MyModel.Children = value; } }
}

public class ContainableModel : ModelBase
{
    public ContainableModel()
    {
        Children = 2;
    }

    public int Children { get; set; }
}

关于c# - Model和ViewModel关系和继承-应该如何实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6498366/

10-12 00:26