0

私は MVVM と PRISM を使用して WPF アプリケーションに取り組んでおり、1 つの問題で立ち往生しています。

それぞれのビュー モデルを持つ 2 つの異なるビュー (View1 と View2) があります。

View1 はドメイン オブジェクトのリストを持つメイン ビューで、View2 はドメイン オブジェクトのプロパティを表示するために使用されます。ここで、選択が変更されるたびにオブジェクトを View2 に渡す必要があります。

できることはわかっていますIEventTriggerが、ビューモデルはイベントがメモリに存在する場合にのみイベントをリッスンできます。

ここで私の問題が発生します。最初から選択項目がありません。View2 はレンダリングされません。Event を介して初めて View2 にオブジェクトを渡す方法がわかりません。

可能な解決策は何ですか?

4

2 に答える 2

1

View1 に SelectedItem プロパティを持つ List が含まれている場合、ViewModel1 に SelectedItem-Property を作成できます。ViewModel1 に ViewModel2-Property を作成します。

次のようにバインドします。

<ListView SelectedItem="{Binding Path=SelectedItem}">
 .
 .
</ListView>
<my:view2 DataContext="{Binding Path=ViewModel2}"/>

最後に、SelectedItem-Property のセッターで SelectedItem を渡します。

public object SelectedItem
{
    get { return _seledtedItem; }
    set { _selectedItem = value; ViewModel2.SomeProperty = _selectedItem; OnPropertyChanged("SelectedItem"); }
}
于 2013-02-01T08:40:32.343 に答える
1

あるViewModelが他のViewModelを参照したくないというコメントで言ったので、代わりにPRISMのEventAggregatorを使用できます

選択が変更されるたびに、SelectionChangedMessagefromをブロードキャストし、それらのメッセージを受信するためViewModel1ViewModel2サブスクライブします。

が最初に作成されたときに選択したアイテムを知る必要がある場合は、ViewModel2のようなものをブロードキャストします。GetCurrentItemMessageViewModel1SelectionChangedMessage

また、PRISM の を初めて使用する場合はEventAggregator私のブログに静的クラスがあります。これを使用すると、 の使用方法を簡素化できEventAggregatorます。デフォルトの構文は非常にわかりにくく、最初は理解しにくいと思います。ほとんどの小さなアプリケーションに使用します。

于 2013-02-01T15:46:54.687 に答える