我的表单中有数据网格和文本框。Datagrid 正在向我显示我的库存中的现有项目。我使用文本框搜索并将焦点设置到与我的文本框匹配的那一行。现在它在 VirtualizingStackPanel.IsVirtualizing="false" 时工作正常,但它非常慢并且需要大量 RAM 资源。这是我的代码。
public IEnumerable<Microsoft.Windows.Controls.DataGridRow> GetDataGridRows(Microsoft.Windows.Controls.DataGrid grid)
{
var itemsSource = grid.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = grid.ItemContainerGenerator.ContainerFromItem(item) as Microsoft.Windows.Controls.DataGridRow;
if (null != row) yield return row;
}
}
private void SearchBoxDataGrid_TextChanged(object sender, TextChangedEventArgs e)
{
var row = GetDataGridRows(AssortDataGrid);
/// go through each row in the datagrid
foreach (Microsoft.Windows.Controls.DataGridRow r in row)
{
DataRowView rv = (DataRowView)r.Item;
// Get the state of what's in column 1 of the current row (in my case a string)
string t = rv.Row["Ассортимент"].ToString().ToLower();
if (t.StartsWith(SearchBoxDataGrid.Text.ToLower()))
{
AssortDataGrid.SelectedIndex = r.GetIndex();
AssortDataGrid.ScrollIntoView(AssortDataGrid.SelectedItem);
break;
}
}
}
我想要的是让它 VirtualizingStackPanel.IsVirtualizing="true" 但在这种情况下我的方法不起作用。我知道为什么它不起作用,我的代码仅适用于显示 Datagrid 的一部分。你有什么建议吗?如何解决这个问题?任何想法将不胜感激。如果您提供任何工作代码,那就太棒了。我希望我能解释我的问题。