1

バックグラウンド :-

caliburn micro/ninjectおよびmvvmパターンを使用してビューモデルによって入力されるコンボボックスを含むwpfビューがあります。このビューには、スタックパネル領域も含まれています。ユーザーがコンボボックスから適切なオプションを選択すると、適切なユーザーコントロールをスタックパネルに挿入して、関連する表示への見かけのない遷移をユーザーに提示します。

スタックパネルに表示される各「ネストされた」ユーザーコントロールには、caliburnmicroによって自動的に関連付けられた独自のビューモデルがあります。

問題 :-

「ネストされた」ユーザーコントロールバインディングはすべて、それらに具体的に関連付けられているビューモデルではなく、親ビューモデルを参照しようとします。

最初は、次のように指定することでこれを回避できます:-

<UserControl.DataContext>
    <vm:UserControlSpecificViewModel/>
</UserControl.DataContext>

ただし、これにはビューモデルにパラメーターのないコンストラクターが必要ですが、NinjectがEventAggregatorなどのオブジェクトを注入できるように、このビューモデルにパラメーターを渡すことができる必要があります。

私はWPFにかなり慣れていないので、円周を回っているので、助けていただければ幸いです。

ありがとう。

ジェームズ。

4

1 に答える 1

0

問題を解決する 1 つの方法は、コード ビハインドでビュー モデルを初期化し、適切なコンストラクターを呼び出すことです。WPF アプリケーションのコード ビハインドが気に入らない場合は、ビュー モデルをIEventAggregatorオブジェクトにバインドするだけでよいと思います。

XAML:

<UserControl1 x:Name="myUserControl">
</UserControl>

コードビハインド:

public MainWindow() // Constructor for window
{
    InitializeContext();
    MyViewModel vm = new MyViewModel(...);
    myUserControl.DataContext = vm;
}
于 2012-11-19T16:17:39.437 に答える