在这个假设的例子中,假设我有一个对象 FooSet,它有五个属性 Foo1、Foo2、Foo3 Foo4 和 Foo5,它们都是 Foo 类型,它本身有几个属性。最后,我有一个名为 FooTemplate 的 DataTemplate,它知道如何以图形方式显示 Foo 类型的对象。
现在使用内置 DataGrid 时,ItemsSource 是 FooSet 对象的集合。我要做的是设置五个模板列,它们都使用 FooTemplate 数据模板。但是,DataGrid 的模板列类型不允许我为该列设置数据源(例如 Foo1、Foo2 等),所以我最终复制了模板,每列一次,只需将 Foo1.SomeProp 更改为 Foo2.SomeProp在模板的绑定中,这当然是荒谬的。但我一辈子都找不到怎么说“B 列使用 Foo2 作为它的数据源”。
这是一些 Pseudo-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 但并没有走得太远(我的猜测是因为本身没有列,而是决定了如何生成行中的单元格,但这只是一个猜测。)
现在我知道第 3 方 Xceed 网格可以让您准确指定,但我希望有一个本地解决方案。
那么,怎么样?或者你可以吗?
米