WPF中能否复用DataTemplate绑定同数据类型的不同属性?
如何复用DataTemplate为DataGridTemplateColumn绑定不同源属性
当然可以实现,核心思路是让复用的DataTemplate继承所在列指定的绑定路径,以下是最简洁的实现方案:
1. 修改通用DataTemplate
将模板中Text的绑定改为无路径的{Binding},它会自动继承所在DataGridTemplateColumn设置的绑定路径:
<Window.Resources> <viewmodel:MainWindowsViewModel x:Key="vm"/> <!-- 只读模板 --> <DataTemplate x:Key="dt"> <TextBlock Background="AliceBlue" Margin="5" Text="{Binding}"/> </DataTemplate> <!-- 编辑模板 --> <DataTemplate x:Key="edt"> <TextBox Background="LightCoral" Margin="10" Text="{Binding Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/> </DataTemplate> </Window.Resources>
编辑模板建议加上
Mode=TwoWay和UpdateSourceTrigger=LostFocus,确保编辑内容能同步回ViewModel的属性。
2. 为DataGridTemplateColumn指定绑定路径
在每个列的定义中,通过Binding属性指定对应的Item源属性:
<DataGrid DataContext="{StaticResource vm}" ItemsSource="{Binding Data}" HorizontalAlignment="Left" Margin="10,10,10,10" VerticalAlignment="Top" > <DataGrid.Columns> <DataGridTemplateColumn Header="Name" Binding="{Binding Name}" CellTemplate="{StaticResource dt}" CellEditingTemplate="{StaticResource edt}" /> <DataGridTemplateColumn Header="Comment" Binding="{Binding Comment}" CellTemplate="{StaticResource dt}" CellEditingTemplate="{StaticResource edt}" /> </DataGrid.Columns> </DataGrid>
原理说明
DataGridTemplateColumn的Binding属性会为单元格的DataContext设置绑定路径上下文,模板中的{Binding}会自动使用这个路径完成绑定,从而实现同一个模板复用在不同列、绑定不同属性的效果。
内容的提问来源于stack exchange,提问作者ArsMi
相关产品推荐
相关产品推荐

