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.