【发布时间】:2021-04-19 16:09:11
【问题描述】:
我有一个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 值绑定回模型,因为可以不断添加/删除项目。 LoadingRow 方法处理显示 DataGrid 中的数字,但我无法将该值返回到绑定到该特定行的对象中,因为标题不是在 <DataGrid.Columns> 部分中定义的特定列XAML。我确实尝试了found here 的解决方案,但是每当我添加新行时,标题单元格将显示每一行的 Index 为 0。任何建议将不胜感激。
【问题讨论】:
-
请记住,对 GetIndex () 方法的单次调用并不能保证在元素的整个生命周期内设置正确的索引。如果元素被删除或插入到集合中,则必须为从更改的元素到集合末尾的所有行再次调用此方法。在 DataGrid 中应用不同的排序时,您也会遇到问题。一般来说,索引的分配最好在 VM 中完成,在 DataGrid 中是绑定到这个属性。
标签: c# wpf data-binding datagrid