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

WPF中Xceed Datagrid跨列数据绑定合并显示的实现问题

解决方案

问题根源

原有代码绑定失效的核心原因:

  • Xceed DataGrid 中CellContentTemplate的默认数据上下文是当前列对应字段的值(此处为ProductName字段值),并非整行的数据源对象
  • 使用ElementName=ProductStatus绑定列对象无效,列属于UI容器定义,不会将自身值传入单元格模板的上下文

修正代码

方案1(最小改动适配原有逻辑)

通过RelativeSource查找当前行控件,取整行数据源的ProductStatus字段:

<xcdg:DataGridControl.Columns>
    <xcdg:Column x:Name="ProductID" FieldName="ProductID" ReadOnly="True" Visible="False" />
    <xcdg:Column x:Name="ProductStatus" FieldName="ProductStatus" ReadOnly="True" Visible="False" />
    <xcdg:Column x:Name="ProductIdentifier" FieldName="ProductIdentifier" ReadOnly="True" Visible="True" Title="Identifier" />
    <xcdg:Column x:Name="ProductName" FieldName="ProductName"  Width="*" ReadOnly="True" Visible="True" Title="Name">
        <xcdg:Column.CellContentTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding DataContext.ProductStatus, RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}}" 
                               Foreground="{StaticResource Blue1Brush}" />
                    <TextBlock Text=" - " />
                    <TextBlock Text="{Binding}" />
                </StackPanel>
            </DataTemplate>
        </xcdg:Column.CellContentTemplate>
    </xcdg:Column>                          
    <xcdg:Column x:Name="VendorNumber" FieldName="VendorNumber" ReadOnly="True" Visible="True" Title="Vendor" />
</xcdg:DataGridControl.Columns>

方案2(更易维护)

直接将模板的上下文指定为整行数据源,后续扩展其他字段更方便:

<xcdg:Column x:Name="ProductName" FieldName="ProductName"  Width="*" ReadOnly="True" Visible="True" Title="Name">
    <xcdg:Column.CellContentTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" DataContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}}">
                <TextBlock Text="{Binding ProductStatus}" Foreground="{StaticResource Blue1Brush}" />
                <TextBlock Text=" - " />
                <TextBlock Text="{Binding ProductName}" />
            </StackPanel>
        </DataTemplate>
    </xcdg:Column.CellContentTemplate>
</xcdg:Column>

注意事项

确保你绑定的业务实体类的ProductStatus和ProductName属性为公开属性,且包含有效get访问器,属性名无拼写错误即可。

内容的提问来源于stack exchange,提问作者Nse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:04