現在、ObservableCollection にバインドされている ItemsSource が設定された GridView があります。
意図したとおりにアイテムが表示されていますが、見た目と動作が異なるアイテムを最後に手動でもう 1 つ追加したいと思います。ItemsSource がバインドされている ObservableCollection を変更せずにそれを行う方法はありますか?
現在、ObservableCollection にバインドされている ItemsSource が設定された GridView があります。
意図したとおりにアイテムが表示されていますが、見た目と動作が異なるアイテムを最後に手動でもう 1 つ追加したいと思います。ItemsSource がバインドされている ObservableCollection を変更せずにそれを行う方法はありますか?
これには2つのアプローチがあります。
MVVMを使用すると、元のコレクションがモデルレイヤーからプルアップされ、追加のアイテムがビューモデルに追加されます。ビューにのみ必要な追加アイテムを検討できるため、これは機能します。たとえば、「上記のすべて」を追加する必要があるポーリングオプションのリストなどです。
2つのコレクションを用意し、分離してから、IValueConverter
をバインドするときにを使用してそれらを連結/結合しItemsSource
ます。このアプローチはよりトリッキーで、両方のコレクションを分離して組み合わせる必要がある場合にのみ本当に役立ちます。たとえば、あるコレクションのアイテムのリストと、別のコレクションのアイテムカテゴリのリストです。
私は、広く使用されている大規模なWPFアプリケーションで両方のアプローチを使用することに成功しました。
編集:質問のコメントを読んで、追加のアイテムの別の視覚的または動作が必要な場合は、セレクターDataTemplateSelector
および/またはを使用してそれを達成できますItemContainerStyleSelector
。最近、オプション#2とテンプレート選択の組み合わせをうまく使用しました。
いくつかのオプション:
CompositeCollectionを使用すると、これをxamlと定義できます。問題が解決するかどうかわからない場合は、少し試してみる必要があるかもしれません
コレクションのアイテムと追加のアイテムが追加された、舞台裏で新しいコレクションを作成します。
新しいアイテムが追加された新しいコレクションを作成する(またはIEnumerableを返す)コンバーターを記述します。
これらのオプションはすべて、すべて新しいコレクションであるという点で共通のテーマを持っていると思います。余分なアイテムがないため、基本的に元のコレクションに直接バインドすることはできません。そのため、何らかの形で他のコレクションにバインドする必要があります。