【发布时间】:2014-09-12 12:47:49
【问题描述】:
我目前正在使用 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
但我发现这是一个非常肮脏的解决方案。
【问题讨论】:
标签: vb.net mvvm prism viewmodellocator