且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用AutoGenerateColumns的WPF Datagrid中的ItemTemplateSelector

更新时间:2022-12-27 15:27:57

首先,


ItemTemplate和ItemTemplateSelector是继承的属性,
在DataGrid中被故意忽略,因为它们并不真正适用于
DataGrid,它们的意思是到$ Items $。

$ p

如果你的意思是要根据其价值来修改单元格模板,那么你是在 DataGridTemplateColumn 上查找 CellTemplateSelector 。但是,当您自动生成列时,它已经自动选择底层类型。



您可以覆盖在 GeneratingColumns 事件中的行为。



参见:在WPF中使用CellTemplateSelector的DataTemplateCell DataGrid自动生成的列



如果需要更多的控制,您可能需要查看 https://zamjad.wordpress.com/2011/09/17/ datagrid-with-dynamic-columns-revisited /


In our data grid we're using an ItemTemplateSelector to switch between two data templates based on the data bound to a particular cell.

As the number of columns depends on the current data set we're using AutoGenerateColumns in our DataGrid.

It appears that this particular combination does not work well -
the template selector isn't even called.

Can we use the template selector in a data grid where columns are created automatically?

More specifically: Is this possible using XAML only w/o putting logic into the code-behind file or using custom behaviours?

Our data grid definition is fairly trivial:

 <DataGrid
     ItemTemplateSelector="{StaticResource myCustomDataTemplateSelector}"
     ItemsSource="{Binding MyData}">
     <DataGrid.Columns>
     </DataGrid.Columns>
 </DataGrid>

The item template selector definition:

<UserControl.Resources>
    <ResourceDictionary>
        <helpers:CustomDataTemplateSelector x:Key="myCustomDataTemplateSelector"/>
    </ResourceDictionary>
</UserControl.Resources>

First,

ItemTemplate and ItemTemplateSelector are inherited properties which are purposely ignored in the DataGrid since they don't really apply to DataGrid in the way that they were meant to in ItemsControl.

Secondly, if you mean that you want to modify cell templae based on its value, you are looking for CellTemplateSelector, on a DataGridTemplateColumn.

However, when you auto-generate columns, it already chooses the underlying types automatically.

You can override that behavior in GeneratingColumns event.

See this: Force DataTemplateCell with CellTemplateSelector in WPF DataGrid Autogenerated columns

If you need more control, you might want to take a look at https://zamjad.wordpress.com/2011/09/17/datagrid-with-dynamic-columns-revisited/