将 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
事件的原因。
我有一个 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
事件的原因。