2011-01-06 15 views
0

したがって、私は観察可能なコレクションを持つオブジェクトを持っています。私がこのコレクションにバインドするほとんどの場所では、ユーザーが単一のアイテムを選択するだけです。しかし、私はコンボボックスにすべてのアイテムオプションを含めることを1つの場所にしたい。WPFコンボボックス、Observableコレクションにバインドするときにすべてのオプション項目を追加する

xaml converterでこれを簡単に行う方法はありますか?

ビューモデルでやっているようですが、実際には多くの依存オブジェクトオブジェクトがあります。基本的には、変更イベントの2つのオブジェクトであるコレクションをワイヤリングしています。働く

しかし、私はいつもxamlコンバーターが一般的で再利用可能でなければならないと感じています。この例では、xamlコンバーターはもう一方のものです。

もちろん、3番目のオプションは、標準観測可能コレクションを含むオブジェクトのUIのリストを1つ作成することです。しかし、これは論理とプレゼンテーションが私を不快にさせるような形で混ざっているようです。

答えて

4

CompositeCollectionをご覧ください。複数のコレクションを1つのコレクションに連結することができます。これは、LINQ Concatに相当するXAMLの種類です。 INotifyCollectionChangedを実装しているため、内部コレクションの一部がObservableCollectionsである場合、変更に対応できる必要があります。

CompositeCollectionでは、個々の要素を追加することもできます。したがって、「すべてのアイテム」を独自のコレクションにラップする必要はありません。 (代わりに、CollectionContainer内のコレクションをラップする必要があります)。

+0

これはうまくいきますが、依然として私が必要としていたことのための依存関係プロパティが必要ですが、私は他のカップルオプションよりもうまくいきました。 –

+0

私はあなたが依存性プロパティが必要であることに驚いています - 私はあなたがINotifyPropertyChangedを使ってうまくいくかもしれないことを想像しました(私は本番ではCompositeCollectionを使ったことはないと認めます)。私はもっ​​と聞くのが好奇妙だと思う。 –

1

私は同様のニーズがあり、この記事で解説したソリューションを使用して終了しました:How To Select Null/None in a ComboBox/ListBox/ListView

98行目の "(None)"文字列を "All"などと置き換えることができます。次に、ViewModelにロジックを追加して、適切な方法でヌル値を「すべて」として扱います。余分なクラスを置くのはちょっと面倒ですが、いくつかの場所でこれが必要な場合は、コードをもっときれいにすることができます。

関連する問題