将SelectedItem集中在ColumnSort WPF上
本文关键字:WPF ColumnSort SelectedItem 集中 | 更新日期: 2023-09-27 18:26:34
当用户通过单击DataGrid
顶部的标题对列进行排序时,我要做的是保持DataGrid.SelectedItem
的焦点。目前,我正在点击DataGrid
列标题调用自己的方法;
private void headerClick(object sender, RoutedEventArgs e)
{
var selectedCompany = dataGrid.SelectedItem as CompanyModel;
var columnHeader = sender as DataGridColumnHeader;
if (columnHeader != null)
{
SetSelectedCompany(Convert.ToInt32(selectedCompany.CompanyID));
}
}
这调用SetSelectedCompany
private void SetSelectedCompany(int companyID)
{
try
{
foreach (var item in dataGrid.Items.OfType<CompanyModel>())
{
if (item.CompanyID == companyID.ToString())// suppose iterRow.Row.ItemArray[0] is ID column in yourDataGrid
{
dataGrid.SelectedItem = item;
dataGrid.ScrollIntoView(dataGrid.SelectedItem);
break;
}
}
}
catch (Exception ex)
{
var hEs = new HandleExceptionService();
hEs.HandleException(ex.ToString());
}
}
当我在UI的其他地方调用它时,这个方法确实有效,但当单击DataGrid
列标题时,它不起作用。这是因为调用了SetSelectedCompany
方法,然后过滤了DataGrid
吗?如果SetSelectedCompany
是筛选过程中调用的最后一个方法,我该如何绕过它?
我认为没有一种简单的方法可以在保持用户选择的行的焦点的同时对数据绑定行进行排序,但如果你能提供更多关于排序后为什么需要焦点的信息(这不是传统的UI行为),那么我们也许可以找到一种不同的方法来剥猫皮。
尝试将用户选择的行绑定到实际数据,如记录ID或其他数据。然后在您的排序方法上,将焦点设置为ID={binded value}的行
DataGrid 中的WPF绑定SelectedItem
尝试处理ColumnHeader
click
。ColumnHeader只是一个Button
:
XAML:
<DataGrid Name="dataGrid">
<DataGrid.Resources>
<Style TargetType="DataGridColumnHeader">
<EventSetter Event="Click" Handler="columnHeader_Click" />
</Style>
</DataGrid.Resources>
</DataGrid>
private void columnHeader_Click(object sender, RoutedEventArgs e)
{
var columnHeader = sender as DataGridColumnHeader;
if (columnHeader != null)
{
SetSelectedCompany(11);
}
}