【问题标题】:Auto incremental DataGrid column without adding it to the DataContext自动增量 DataGrid 列而不将其添加到 DataContext
【发布时间】:2017-09-25 14:12:12
【问题描述】:

在我的DataGrid 中有一个 Serial 列,它唯一的工作是在记录旁边显示订单号,所以如果有 10 条记录,那么该列包含从 1 到 10 的数字 .. 为了实现这一点,我正在添加一个新属性,特别是在部分类和代码中,我循环遍历列表,为每个循环递增 Serial 属性:

    for (int i = 0; i < lstPriceListItems.Count; i++)
    {
       lstPriceListItems[i].Serial = i + 1;
    }

然后在 XAML 中:

<DataGrid.Columns>
           <DataGridTextColumn Header="Serial" Binding="{Binding Serial}"/>
           <DataGridTextColumn Header="Code" Binding="{Binding Code}"/>
</DataGrid.Columns>

我相信这不切实际,因为lstPriceListItems代表一个数据对象,而Serial是一个数字表示的UI特性,它们不能组合在一起,所以我想如果在XAML处理中有办法这样的场景,无需触及 DataContext

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    您的方法确实没有错。 lstPriceListItems 可以被视为一个 view 模型,因为它显示在 DataGrid 中。

    如果您在客户端应用程序之外的其他地方使用此类,您可以创建一个新类来包装它并添加额外的Serial 属性并将DataGridItemsSource 属性设置为以下序列新类型并像您当前所做的那样填充 Serial 属性。

    另一种方法是为DataGrid 处理LoadingRow 事件,如下所示:https://blog.magnusmontin.net/2014/08/18/right-aligned-row-numbers-datagridrowheader-wpf/。或者使用显示当前项目从 1 开始的索引的转换器进行绑定。

    【讨论】:

    • 能否请您解释一下使用转换器的建议?
    • 阅读博文。
    • 我阅读了使用 LoadingRow 事件的部分,该事件在 DataGrid 中有效,但在 Syncfusion SfDataGrid 中无效(为简单起见,我没有提及)。然后我将阅读全文。谢谢
    【解决方案2】:

    是的,有一种非常简单的方法可以使用 XAML 和背后的代码来执行此操作,而无需实际接触 DataContext。您需要添加一个名为 LoadingRow 的事件。每当在 DataGrid 上添加新行或加载整个 dataGrid 时,它实际上会自动递增。

    <DataGrid x:Name="DataGridName" LoadingRow="DataGridName_LoadingRow">
       <DataGridColumn>
          <DataGridTextColumn header="First Name" Binding="{Binding FirstName}"/>
          <DataGridTextColumn header="Last Name" Binding="{Binding LastName}"/>
       </DataGridColumn>
    </DataGrid>
    

    然后在后面的代码中这样做

    private void DataGridName_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = (e.Row.GetIndex() + 1).ToString();
        }
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2020-09-05
      • 1970-01-01
      • 2018-07-25
      • 2016-05-29
      • 2021-03-21
      • 2019-01-18
      • 2015-06-05
      相关资源
      最近更新 更多