资源中的WPF数据模板,绑定
本文关键字:绑定 数据 WPF 资源 | 更新日期: 2023-09-27 17:53:37
下面有DataGrid(简化)
<DataGrid ItemsSource="{Binding Something}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<TextBox Text="{Binding A}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding A}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<TextBox Text="{Binding B}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding B}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</Datagrid>
有没有办法将数据模板移动到资源和重用它的不同属性,所以我不需要复制和粘贴每个属性的数据模板?
一个实用的解决方案是在资源级别定义模板,并将它们包装在每个列的'ContentPresenter'中。您仍然需要显式地为每个列定义一个模板。不过,您可以在一个地方管理模板,并快速查看列绑定到哪些属性。
<DataGrid>
<!-- Templates in a single place in resources -->
<DataGrid.Resources>
<DataTemplate x:Key="CellTemplate">
<TextBlock Text="{Binding}" />
</DataTemplate>
<DataTemplate x:Key="EditCellTemplate">
<TextBlock Text="{Binding}" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding A}" ContentTemplate="{StaticResource CellTemplate}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding A}" ContentTemplate="{StaticResource EditCellTemplate}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding B}" ContentTemplate="{StaticResource CellTemplate}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding B}" ContentTemplate="{StaticResource EditCellTemplate}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
你可以这样做:
<DataGrid ItemsSource="{Binding Something}">
<DataGrid.Resources>
<DataTemplate x:key="MyTemplate">
<Grid>
<TextBox Text="{Binding}"/>
</Grid>
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test"
CellTemplate="{StaticResource MyTemplate}"
>
</DataGridTemplateColumn>
</DataGrid.Columns>
</Datagrid>
但是您需要重新考虑绑定逻辑,因为您需要在同一模板中为所有列使用单元格数据上下文。