gpt4 book ai didi

vb.net - PRISM 5 : ViewModelLocator in VB. NET,无法在 View 中实现 IView

转载 作者:行者123 更新时间:2023-12-03 10:46:04 24 4
gpt4 key购买 nike

我目前正在使用 MVVM 模式和 PRISM ViewModelLocator 在 VB.NET 中构建一个 PRISM 5 应用程序。 PRISM ViewmodelLocator 需要所有 View 来实现 Microsoft.Practises.Prism.Mvvm.IView 接口(interface)。这个接口(interface)只包含一个属性:DataContext。

由于 View(它是一个 FrameworkElement)已经具有属性 DataContext,在 c# 中,在 View 类名称后面添加“:IView”就足够了,而无需为 DataContext 属性提供新的实现(隐式接口(interface)实现)。神奇的是,ViewModel 然后通过 Datacontext 属性自动连接到 View。

在 VB.NET 中这是不可能的,因为您不能进行隐式接口(interface)实现。在类的顶部添加“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

有没有围绕这个的最佳实践?

到目前为止,我发现似乎可行的只是将此行添加到我的 View 的构造函数中:
Datacontext = Datacontext1

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

最佳答案

尝试:

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新属性的 getter 和 setter 中的属性。

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

关于vb.net - PRISM 5 : ViewModelLocator in VB. NET,无法在 View 中实现 IView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com