[英]WPF DataTemplate in resource, binding
我有以下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>
有沒有辦法將DataTemplate移動到資源並將其重用於不同的屬性,因此我不必為每個屬性復制和粘貼DataTemplate?
一個實用的解決方案是在資源級別定義模板,並將它們包裝在每列的“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>
但是,您需要重新考慮綁定邏輯,因為您需要在同一模板中為所有列使用cell datacontext。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.