В этом гипотетическом примере представьте, что у меня есть объект FooSet, имеющий пять свойств Foo1, Foo2, Foo3 Foo4 и Foo5, каждый из которых имеет тип Foo, который сам имеет несколько свойств. Наконец, у меня есть DataTemplate с именем FooTemplate, который знает, как графически отображать объекты типа Foo.
Теперь при использовании встроенной DataGrid ItemsSource представляет собой набор объектов FooSet. Что я хочу сделать, это настроить пять шаблонных столбцов, которые все используют шаблон данных FooTemplate. Тем не менее, тип столбца шаблона DataGrid не позволяет мне установить источник данных для этого столбца (например, Foo1, Foo2 и т. Д.), Поэтому я заканчиваю дублирование шаблона, один раз для каждого столбца, просто меняя 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. Все остальные столбцы позволяют вам установить некоторую привязку, которая делает это. Я даже пытался создать подкласс DataGridTemplateColumn, чтобы добавить DataSource, но не зашел слишком далеко (мое предположение состоит в том, что столбца как такового нет, а, скорее, он определяет, как генерируются ячейки в строках, но это только предположение.)
Теперь я знаю, что сторонняя сетка Xceed позволяет вам указать именно это, но я надеюсь на собственное решение.
Итак, как устроится? Или ты можешь?
M