将 DataGrid 行号绑定到 属性

Binding DataGrid Row Number to Property

我有一个 DataGrid(名为 OperatorDataGrid),行号是通过 LoadingRow 事件设置的:

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

并且 DataGrid 本身绑定到一个 ObservableCollection<FilterRow>,其中 FilterRow 作为一个名为 Index 的 属性(当前未使用)。绑定在用户控件的构造函数中完成:

public AdvancedFilter()
{
    InitializeComponent();
    SetDefaults();

    FilterRows.Add(new FilterRow());
    OperatorDataGrid.ItemsSource = FilterRows;
}

我想不通的是如何将 Row.Header 值绑定回模型,因为项目可以一直是 added/removed。 LoadingRow 方法处理显示 DataGrid 中的数字,但我无法将该值返回到绑定到该特定行的 object 中,因为 header 不是特定的在 XAML 的 <DataGrid.Columns> 部分中定义的列。我确实尝试了解决方案 found here,但是每当我添加新行时,header 单元格都会显示 Index is 0 for every row。如有任何建议,我们将不胜感激。

您可以在设置 Header:

时自行设置来源 属性
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
    int rowNumber = e.Row.GetIndex() + 1;
    e.Row.Header = rowNumber.ToString();

    var dataObject = e.Row.DataContext as YourClass;
    if (dataObject != null)
        dataObject.RowNumber = rowNumber;
}

那么你就知道你在视图中看到的行号与数据对象的属性是同步的。

无法直接绑定到 XAML 中的 GetIndex() 之类的方法,这就是您首先处理 LoadingRow 事件的原因。