在 MVVM 中为视图模型设置一个空的基类是一种不好的做法吗?



我正在为学校项目设计一个(有点(简单的测验应用程序,以熟悉 MVVM。

它有两个视图 - 一个用于实际的测验部分,另一个用于完成后的结果等。

为了在这些视图之间导航,我正在使用当前为空的 BaseVeiwModel 类(仅继承自 INotifyPropertyChanged 的 ObservableObject 类实现(。

然后,这是我的两个视图模型的基类,其中我将其实例设置为当前视图,允许我使用第一个视图模型中的方法在它们之间切换。

我想问一下,拥有一个空的基视图模型类是否是一种不好的做法,如果是,我该怎么办?我确实考虑过只使用ObservableObject实例,因为它们都继承自OBservableObject-但我认为这看起来不那么清晰,更混乱-因为我的模型也继承自ObservableObject。

编辑:

所以,我的BaseViewModel目前在我的第一个VeiwModel中得到了保护。

private BaseVeiwModel _currentVeiw;
public BaseVeiwModel CurrentVeiw
{
get { return _currentVeiw; }
set { OnPropertyChanged(ref _currentVeiw, value); }
}
//in the constructor:
CurrentVeiw = this;

然后我有一个方法(目前由按钮用作命令,但将在 QuestionViewModel 类中调用(将视图更改为我的第二个视图:

private void ChangeView(object blank)
{
CurrentVeiw = new FinishedVeiwModel();
Console.WriteLine("Button Clicked!");
Console.WriteLine(CurrentVeiw);
}

我的基类很简单:

public class BaseVeiwModel :ObservableObject
{
//Completely empty
}

不,这不是一个坏做法。例如,在基类中实现例如INotifyPropertyChanged是一个好主意,否则您必须在每个视图模型中执行此操作。

我建议将基类设为abstract.然后,不能创建此基类的实例。

public abstract class BaseViewModel

查看摘要(C# 参考(

abstract修饰符表示被修改的内容具有 缺失或不完整的实施。抽象修饰符可以是 与类、方法、属性、索引器和事件一起使用。使用 类声明中的abstract修饰符,用于指示类 仅用于成为其他类的基类。标记为的成员 抽象或包含在抽象类中,必须由 派生自抽象类的类。

为所有视图模型提供一个通用基类是一种非常常见的方法。

所有的MVVM框架都在那里工作,例如MvvmLight,Prism,Caliburn.Micro和RectiveUI,包括一个基类,你的自定义视图模型类应该从中继承。

所以这当然不是一个坏做法。还可以提供自己的从库基类继承的基类。

如果基类确实是空的,即根本没有INotifyPropertyChanged实现或任何代码,您可能需要考虑改用接口,但除此之外,您的方法没有任何问题。

最新更新