我正在为学校项目设计一个(有点(简单的测验应用程序,以熟悉 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
实现或任何代码,您可能需要考虑改用接口,但除此之外,您的方法没有任何问题。