2009-06-04 16 views
0

私が思ったことを実装しようとするのは単純な概念でした。私は、データのリストを提供するビューモデルにバインドされたユーザーコントロール(ビュー)を持っています。ユーザーコントロールにトグルボタンを追加し、ユーザーがこれらのトグルボタンを使用してデータを表示するために使用するテンプレートを切り替えることを許可したいと考えています。データに使用されているテンプレートはすべて、非常に異なっているため、単一のテンプレートだけを変更するだけではありません。私は可能な限りXAMLでこれを多く得たいと思います。WPF:UserControlデータに基づくテンプレートの切り替え

は、ここで私が今持っているものです。

データは、私は「サブテンプレート」すべて持っているコントロールテンプレートでは

<UserControl Template="{StaticResource ListSwitchingControlTemplate}" />を持って表示されます

- 実際にそれが崩壊に設定され、その可視性を持つだけで、すべての3つの表現です。次に、そのコントロールテンプレートでデータトリガーを使用して、現在選択されているビューを表示します。これは動作しますが、私は3つの表現がすべて拘束されていることに気付きました - それぞれがアクティブであるように行動します(そして、私は推測しています)。

私はむしろ実行時に本当にテンプレートを切り替えることができます。私は含まれているユーザーコントロールをContentTemplateを使用するように変換しようとしましたが、それは他の場所にあるすべてのバインディングを壊してしまいます。 UserControlsだけがDataTriggersを使用できる場合、私は大丈夫でしょう。

この動作を正常に行う方法については、ご提案ください。私は単純なものを見逃しているという考えがあります。

おかげで、 デイブ

+0

私はDataTemplateSelectorルートを行くことなく、これまでにこれを行うための方法を見つけていませんでした。それでも、テンプレート内のデータは、どのように表示されるかを知らないため、表示するテンプレートの決定に役立つことはありません。代わりに、私の場合は、ユーザーコントロールの他の場所にあるトグルボタンの外側にあります。 –

答えて

1

一つの方法は、DataTemplateSelectorを使用することです。

基本的に、DataTemplateSelectorから継承し、そのSelectTemplate仮想関数をオーバーライドするクラスを作成します。関数からの戻り値は、使用するDataTemplateであり、その関数ではオブジェクトとそのプロパティにアクセスできます。これを使用して、選択するテンプレートを決定できます。

MSDN上の例はここにあります:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

関連する問題