最後にコンストラクターにパラメーターが含まれている場合、ユーザーコントロールをビューモデルオブジェクトにバインドするにはどうすればよいですか???
ビューで「DataContext」を使用するバインディングは、ビューモデルを作成するときにビューが自動的に作成されることを保証しますか??
最後にコンストラクターにパラメーターが含まれている場合、ユーザーコントロールをビューモデルオブジェクトにバインドするにはどうすればよいですか???
ビューで「DataContext」を使用するバインディングは、ビューモデルを作成するときにビューが自動的に作成されることを保証しますか??
IoC コンテナーを使用している場合、これはすぐにサポートされます。
使用している IoC コンテナに大きく依存しますが、ここでは Prism Unity コンテナを使用した例を示します。
次の例は、Prism QuickStarts ガイドから抜粋したものです。
したがって、最初に Unity コンテナーをセットアップする必要があります。
public class QuickStartBootstrapper : UnityBootstrapper
{
private readonly CallbackLogger callbackLogger = new CallbackLogger();
/// <summary>
/// Configures the <see cref="IUnityContainer"/>.
///May be overwritten in a derived class to add specific
/// type mappings required by the application.
/// </summary>
protected override void ConfigureContainer()
{
// Here you can do custom registeration of specific types and instances
// For example
this.Container.RegisterInstance<CallbackLogger>(this.callbackLogger);
base.ConfigureContainer();
}
}
基本的に、これで完了です。あとは、次のように、viewModel をコンストラクターのパラメーターとしてビューに受け取るようにするだけです。
public partial class OverviewView
{
public OverviewView(OverviewViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
}
Unity IoC コンテナーは、ほとんどの場合、これらのタイプを登録しなくても、ViewModel のパラメーターを処理します。
私の回答では、構成の IoC 部分のみを参照したことに注意してください。MVVM アプリケーション全体をセットアップするには、もう少し作業が必要で、使用している MVVM フレームワークによって異なります。