[英]Keep SelectedItem in Focus on ColumnSort WPF
我正在嘗試做的是當用戶通過單擊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
是篩選過程中最后調用的方法?
嘗試處理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);
}
}
我看不到在保持用戶選擇的行的焦點的同時對數據綁定行進行排序的簡便方法,但是如果您可以提供更多有關為什么排序后需要焦點的信息(這不是常規的UI行為),那么也許我們可以找出另一種方法給貓皮
嘗試將用戶選擇的行綁定到實際數據,例如記錄ID或其他內容。 然后在您的排序方法上,將焦點設置為ID = {binded-value}的行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.