2012-02-07 12 views
0

最近MVVMパターンでのObservableCollection を実装する必要がありますが、私は解決できない2つの問題が発生しました: は、ビューモデルによって公開されたコレクションは、私はMVVMデザインパターンを実装しようとしている、

  1. ように私はビューのModelViewにそれを渡すために、私のモデルクラスでのObservableCollectionを使用する必要があり、それを参照してください。 ビューモデル構造に影響してはいけません。この特定のコレクションタイプに限定するべきではないため、私が間違っていることを願っています。

  2. バリュータイプのアイテムリストで双方向バインディングを行う方法はありますか?

例:

public ObservableCollection<bool> MyBooleans 
{ 
    get { return m_booleans; } 
} 
<ListView ItemsSource="{Binding MyBooleans}" ...> 
    <ItemTemplate> 
     ... 
     <CheckBox IsChecked="{Binding}" ... /> 
     ... 
    </ItemTemplate> 
</ListView> 
+0

1.いいえ、依存プロパティ、 'INotifyCollectionChanged'、' INotifyPropertyChanged'を参照してください。 2.ラッパーなしではありません。 – user7116

+2

** [フォーマットのヘルプ](http://stackoverflow.com/editing-help)を読んでください**。 –

答えて

8

ビューモデルはObservableCollections(又はINotifyCollectionChangedを実装する他のいくつかのクラス)として(すなわち、アイテムが削除/追加した)変化コレクションを公開すべきです。これはではありませんあなたのモデルは、このインターフェイスを実装するコレクションを公開する必要があることを意味します。

あなたのビューモデルは事実上モデル上にあり、より簡単にバインド可能なアダプタです。たとえば、アプリケーションでツイートが表示されている場合、サービスレイヤーはツイートのリストであるモデルを返すことがあります。ビューモデルは、これらを観察可能なコレクションに挿入し、ビューを更新します。あなたは将来、(タイマーを使用して)あなたのサービスを介して新しいツイートを取得することができます。これらは、リストとして返されます。あなたのビューモデルは、これらのつぶやきをObservableCollectionに追加し、その結果、新しいアイテムがビューに表示されます。

+0

+1、私はあなたに完全に同意する! –

+1

ファイルを表すモデルがあり、Flagsメンバー(List )があります。これらのフラグはGUIによって変更する必要があります。この場合、すべての変更に対してコレクションを1つずつコピーする必要がありますか? – user574645

関連する問題