在MVVM中为Viewmodels创建一个空基类是不好的做法吗?

时间:2017-08-10 12:03:18

标签: c# wpf oop mvvm

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

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

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

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

我想问一个基本的viewmodel类是否为空是不好的做法,如果我应该怎么做?我确实考虑过只使用一个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);
    }

My Base类只是:

 public class BaseVeiwModel :ObservableObject
{
    //Completely empty
}

2 个答案:

答案 0 :(得分:5)

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

我建议您制作基类abstract。那么你就无法创建这个基类的实例。

public abstract class BaseViewModel

查看abstract (C# Reference)

  

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

答案 1 :(得分:1)

为所有视图模型建立公共基类是一种非常常见的方法。

所有MVVM framworks都在那里,例如MvvmLight,Prism,Caliburn.Micro和RectiveUI包含一个基类,您的自定义视图模型类应该从该基类继承。

所以这当然不是一个坏习惯。您还可以提供自己的基类,该基类继承自库基类。

如果基类真的是空的,即没有INotifyPropertyChanged实现或任何代码,你可能会考虑使用一个接口,但除此之外你的方法没有任何问题。