这是 MVVM + WPF,但实际上与这些工具没有太大关系。问题比较笼统,属于OO设计。
昨天 MarcinJuraszek 帮助我提出了一个解决原始问题的好方法。该解决方案解决了手头的问题,但现在我陷入了下一个层次。事情是这样的:
视图模型
我的 ViewModel 类继承自一个通用的抽象父 ViewModel 类:
Public MustInherit Class ViewModelBase
Implements INotifyPropertyChanged, IDisposable
...
End Class
具体的 ViewModel 如下所示:
Class SalesOrderEntryViewModel
Inherits ViewModelBase
Implements IEditorViewModel, IChildViewModel
...
End Class
IEditorViewModel
并且IChildViewModel
是我的一些具体 ViewModel 实现的接口。
意见
我所有的 View 类都实现了以下接口:
Interface IView(Of T As ViewModelBase)
WriteOnly Property MyVM As T
ReadOnly Property HeaderText As String
End Interface
基于上述SalesOrderEntryViewModel
I 的具体视图定义为:
Class SalesOrderEntryPage
Implements IView(Of SalesOrderEntryViewModel)
End Class
到现在为止还挺好。我现在面临的实际问题是我想在应用程序级别创建所有打开的视图的强类型集合。这个集合的类型应该是什么?我尝试了类似以下的方法:
Dim Views As List(Of IView(Of ViewModelBase))
当我尝试将SalesOrderEntryPage
类的对象添加到此列表时,它会引发运行时异常,告诉我它无法从 转换SalesOrderEntryPage
为IView(Of ViewModelBase)
,尽管查看定义,SalesOrderEntryPage
确实是IView(Of ViewModelBase)
.
目前,VB.NET 正在帮助我进行后期绑定,但我想知道为什么会这样说,在这方面什么是优雅的解决方案?