gpt4 book ai didi

c# - Model和ViewModel关系和继承-应该如何实现?

转载 作者:行者123 更新时间:2023-12-03 10:24:23 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com