PRISM 5:VB.NET中的ViewModelLocator,在View中不可能实现IView

时间:2014-09-12 12:47:50

标签: vb.net mvvm prism viewmodellocator

我目前正在使用PRISM ViewModelLocator使用MVVM模式在VB.NET中构建PRISM 5应用程序。 PRISM ViewmodelLocator要求所有视图都实现Microsoft.Practises.Prism.Mvvm.IView接口。此接口仅包含一个属性:DataContext。

作为一个View(它是一个FrameworkElement)已经有一个属性DataContext,在c#中添加":IView"在View类名后面,没有为DataContext属性提供新的实现(隐式接口实现)。通过魔术,ViewModel然后通过Datacontext属性自动连接到View。

在VB.NET中这是不可能的,因为你不能做隐式接口实现。添加"实施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

但我发现这是一个非常肮脏的解决方案。

1 个答案:

答案 0 :(得分:0)

尝试:

Public Shadows Property DataContext As Object Implements IView.DataContext

所以查看将是:

Imports Microsoft.Practices.Prism.Mvvm

Namespace Views
    Class MyWindow
        Inherits Window
        Implements IView

        Public Shadows Property DataContext As Object Implements IView.DataContext
    End Class
End Namespace

但是,如果您希望保留依赖项属性行为,则可能需要更新实际的基类'新房产的“DataContext财产”是吸气剂和制定者。

您可以在this SO question找到更多信息。

相关问题