我目前正在使用 MVVM 模式和 PRISM ViewModelLocator 在 VB.NET 中构建一个 PRISM 5 应用程序。PRISM ViewmodelLocator 需要所有视图来实现 Microsoft.Practises.Prism.Mvvm.IView 接口。这个接口只包含一个属性:DataContext。
由于 View(它是一个 FrameworkElement)已经具有属性 DataContext,在 c# 中,在 View 类名称后面添加“:IView”就足够了,而无需为 DataContext 属性提供新的实现(隐式接口实现)。神奇的是,ViewModel 然后通过 Datacontext 属性自动连接到 View。
在 VB.NET 中这是不可能的,因为您不能进行隐式接口实现。在类的顶部添加“Implements IView”时,VB 指示为 DataContext 属性提供一个实现。由于 FrameworkElement 已经有一个 Datacontext 属性,VB 会自动添加一个 Datacontext1 属性的实现。当然,将 ViewModel 连接到 View 是行不通的。下面是我的代码:
看法
Imports Microsoft.Practices.Prism.Mvvm
Namespace Views
Class MyWindow
Inherits Window
Implements IView
Public Property DataContext1 As Object Implements IView.DataContext
End Class
End Namespace
视图模型
Imports Microsoft.Practices.Prism.Mvvm
Namespace ViewModels
Public Class MyWindowViewModel
Inherits BindableBase
Private mTheText As String = "This is the text."
Public Property TheText() As String
Get
Return Me.mTheText
End Get
Set(ByVal value As String)
SetProperty(Of String)(Me.mTheText, value)
End Set
End Property
End Class
End Namespace
有没有围绕这个的最佳实践?
到目前为止,我发现似乎可行的只是将此行添加到我的视图的构造函数中:
Datacontext = Datacontext1
但我发现这是一个非常肮脏的解决方案。