PRISM 5: ViewModelLocator в VB.NET, реализация IView невозможна в представлении

В настоящее время я создаю приложение PRISM 5 в VB.NET, используя шаблон MVVM, используя PRISM ViewModelLocator. PRISM ViewmodelLocator требует, чтобы все представления реализовали интерфейс Microsoft.Practises.Prism.Mvvm.IView. Этот интерфейс содержит только одно свойство: DataContext.

Поскольку представление (которое является элементом FrameworkElement) уже имеет свойство DataContext, в С# достаточно добавить ": IView" за именем класса View, не предоставляя новую реализацию для свойства DataContext (реализация неявного интерфейса). По волшебству ViewModel автоматически подключается к представлению через свойство Datacontext.

В VB.NET это невозможно, так как вы не можете выполнять неявные реализации интерфейса. При добавлении "Версии IView" в верхней части класса VB инструктирует предоставить реализацию для свойства DataContext. Поскольку FrameworkElement уже имеет свойство Datacontext, VB автоматически добавляет реализацию для свойства Datacontext1. Конечно, подключение ViewModel к представлению не работает. Ниже мой код:

Посмотреть

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

ViewModel

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 ответ

Попробуйте:

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 свойства.

Вы можете найти дополнительную информацию по этому вопросу.

licensed under cc by-sa 3.0 with attribution.