对不起,标题令人困惑。我不确定如何实现从基类派生的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/