フォームに Datagrid と Text Box があります。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 の一部を表示するためだけに機能します。おすすめは何ですか?この問題を解決するにはどうすればよいですか? どんなアイデアでも大歓迎です。動作するコードを提供すると、それは素晴らしいものになります。私の問題を説明できれば幸いです。