You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:45:16