この架空の例では、Foo1、Foo2、Foo3、Foo4、および Foo5 の 5 つのプロパティを持つオブジェクト FooSet があるとします。これらはすべて、それ自体がいくつかのプロパティを持つ Foo 型です。最後に、FooTemplate という DataTemplate を用意しました。これは、Foo 型のオブジェクトをグラフィカルに表示する方法を知っています。
組み込みの DataGrid を使用する場合、ItemsSource は FooSet オブジェクトのコレクションです。私がやりたいことは、すべて FooTemplate データ テンプレートを使用する 5 つのテンプレート化された列を設定することです。ただし、DataGrid のテンプレート列の種類では、その列 (Foo1、Foo2 など) のデータ ソースを設定できないため、テンプレートを複製し、列ごとに 1 回、Foo1.SomeProp を Foo2.SomeProp に変更するだけです。もちろんばかげているテンプレートのバインディングで。しかし、私は一生、「列 B は Foo2 をデータ ソースとして使用する」と言う方法を見つけることができません。
ここに私が望むものを示すための疑似XAMLがあります...
<Resources>
<DataTemplate TargetType="Foo">
<StackPanel>
<local:FooPropAControl Value="{Binding FooPropA}" />
<local:FooPropBControl Value="{Binding FooPropB}" />
<local:FooPropCControl Value="{Binding FooPropC}" />
</StackPanel>
</DataTemplate>
</Resources>
<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTemplateColumn DataSource="{Binding Foo1}" />
<DataGridTemplateColumn DataSource="{Binding Foo2}" />
<DataGridTemplateColumn DataSource="{Binding Foo3}" />
<DataGridTemplateColumn DataSource="{Binding Foo4}" />
<DataGridTemplateColumn DataSource="{Binding Foo5}" />
</DataGrid.Columns>
</DataGrid>
列でテンプレートを明示的に指定する必要がある場合でも、それでも問題ありません。その列のデータ ソースを FooSet のプロパティに設定しているので、DataTemplate を 1 つだけ使用できます。他のすべての列では、それを行うバインディングを設定できます。DataGridTemplateColumn をサブクラス化して DataSource を追加しようとしましたが、あまりうまくいきませんでした (私の推測では、列自体はなく、行内のセルがどのように生成されるかを指示するためですが、それは単なる推測です)。
サードパーティの Xceed グリッドで正確に指定できることはわかっていますが、ネイティブ ソリューションを期待しています。
それで、どうですか?それともできますか?
M