ビューモデルでは、MEFedMVVM
を使用してインスタンス化されますViewModelLocator
。MEFedMVVM
ビューモデルに任意のコンストラクターを使用できるため、非常に強力です。
[ExportViewModel("MyViewModel")]
public class MyViewModel : NotifyPropertyChangedBase
{
[ImportingConstructor]
public MyViewModel(IMediator mediator, IContainerStatus containerStatus, IDispatcherService dispatcherService)
{
}
}
IMediator
、IContainerStatus
およびIDispatcherService
は、 を通じてインスタンス化されるサービス インターフェイスMEF
です。明らかに、必要に応じて独自のサービスを作成できます。
問題
ビューが読み込まれたら、その子のreadonlyプロパティのメンバーにビューモデルのデータを割り当てる必要があります。理想的には、この変数を に直接バインドしますXAML
が、プロパティは読み取り専用であり、そのメンバーはアタッチ可能なプロパティではないため、それを行うことはできません。現在、私は醜い回避策を持っています:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var viewModel = DataContext as MyViewModel;
this.child.SomeReadonlyProperty.Data = viewModel.MyData;
}
ビューとビューモデルのこの結合を取り除きたいです。との両方が役立つ可能性のあるさまざまなパターンMEFedMVVM
をPrism
提供しますが、どちらをどのように使用すればよいかわかりません。サービスがビューとビューモデルの両方にアクセスできるようにしても問題ありませんか?
Q: カップリングを取り外すには、どのようなパターンを使用すればよいですか?