0

WPF で MVVM モデルを使用しているときに問題が発生しました。ここに私のオブジェクトがあります:

ビュー

  • MainWindow(View) (このビューの DataContext は MainWindowViewModel にバインドされます)

  • ItemViewWindow (このための DataContext は ItemListViewModel をバインドします)

ビューモデル

  • MainWindowViewModel (内容: ObservableCollection アイテム)

  • ItemListViewModel (内容: ObservableCollection Items、ItemViewModel SelectedItem、その他のプロパティ/コマンド)

ItemViewWindow は、MainWindow のメニュー ボタンからアクセスします。MainWindow から ItemView にコレクションだけを渡せるようにしたい (注: ItemListViewModel が必要なため、DataContext として設定することはできません)。次に、そこで行われた変更は MainWindow に反映されます。

Collection ではなく MainWindowViewModel のプロパティとして ItemListViewModel を使用する方法があることはわかっています。それを DataContext として渡すこともできますが、MainWindowViewModel に ItemListViewModel の追加機能を持たせるのは間違っているようです。UI コード ビハインドを使用せずにこれを行うよりエレガントな方法はありますか?

4

1 に答える 1

0

次のいずれかではない理由:

a: コレクションを割り当てるプロパティを ItemListViewModel に公開させます。

class ItemListViewModel 
{
    public SomeCollectionType TheCollection { get; set; } // most likely you have INotifyPropertyChanged etc so probably more to it than get/set
}

次に、MainWindowViewModel で ItemVM をインスタンス化するときに設定します。

public void OpenItemList() 
{
    var itemList = new ItemListViewModel();
    itemList.TheCollection = CollectionFromThisVM;
    // etc
}

または...

b:EventAggregatorパターンのようなものを使用して、サブスクライブする ItemListViewModel のコレクションを含むメッセージを公開します

最初の方法はより簡単に見えます

于 2012-10-09T11:28:13.977 に答える