0

MainWindowViewModelのコンストラクタコールでパラメータを挿入する方法がわかりません。私が望むのは、現在のメインウィンドウ(this)のインスタンスをviewmodellocatorに登録することです。どのように私はこれを達成することができますか?mvvmlightで依存性注入を処理する方法

これはviewmodellocatorクラスの私の状況です:

public ViewModelLocator() 
{ 
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

    //SimpleIoc.Default.Register<Window>(); //THIS IS NOT WORKING BECOUSE ITS A NEW INSTANCE, I NEED THE INSTANCE OF THE CURRENT MAINWINDOW HERE. 
    SimpleIoc.Default.Register<MainWindowViewModel>(); 
} 

はMainViewModel:

public MainWindowViewModel(Window window) 
{ 
    this.Window = window; 

    //Listen out for the window resizing 
    this.Window.StateChanged += StateChanged; 
} 

MainWindow.xaml

DataContext="{Binding MainWindow, Source={StaticResource Locator}}" 
+0

ところで、あなたはあなたのビューモデルをビューの参照を提供することにより、全体のMVVMの概念を破壊しています。ビューモデルはビューを気にするべきではありません。 – dymanoid

答えて

1

あなたはWindowがあなたのMainWindowに解決されるようにするには:

public ViewModelLocator() 
{ 
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

    SimpleIoc.Default.Register<System.Windows.Window>(() => System.Windows.Application.Current.MainWindow as MainWindow); 
    SimpleIoc.Default.Register<MainViewModel>(); 
} 

はまた、あなたがあなたのXAMLにちょうど「メイン」に特異的に結合する必要があることに注意してください:

DataContext="{Binding Main, Source={StaticResource Locator}}" 
+1

多くのありがとうmm8!これはまさに私が探していたものでした。今の魅力のように動作します。最後に私はDIに関するいくつかのことを理解しています。あなたがここで使ったのは、私が信じる工場のパターンです。私はその知識に取り組まなければなりません。あなたの2番目のコメントについて。私は大会以上の構成を使用しているので、MainWindowのロケータ内で自分のプロパティの名前を付けました。これは問題ありませんでした。この迅速な対応に感謝します。私は幸せだと私もあなたが願っています:) – RocketRon

+1

あなたがmm8を見ることができるように私はちょうどupvotedし、解決としてマーク! – RocketRon