現在、PRISM ViewModelLocator を使用して、MVVM パターンを使用して VB.NET で PRISM 5 アプリケーションを構築しています。PRISM ViewmodelLocator では、すべてのビューで Microsoft.Practises.Prism.Mvvm.IView インターフェイスを実装する必要があります。このインターフェイスには、DataContext というプロパティが 1 つだけ含まれています。
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
しかし、これは非常に汚い解決策だと思います。