У меня есть Datagrid
, в котором есть только один столбец, и я хочу применить к нему пользовательскую сортировку. В настоящее время, когда я ищу слово "Clark", Datagrid отображает отфильтрованный результат следующим образом:
David Clark
Clark David
Но я хочу отобразить тот элемент, который начинается с FilterString
в первой строке:
Clark David
David Clark
Если пользователь ищет "Дэвид", результат должен быть:
David Clark
Clark David
Это моя таблица данных:
<TextBox Name="SearchBox" KeyUp="SearchBox_OnKeyUp" />
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding WordsCollectionView}">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Binding="{Binding}" />
</DataGrid.Columns>
</DataGrid>
И это мой код:
string[] words = { "David Clark", "Clark David", "John Smith"};
private string _filterString = "";
private ICollectionView _wordsCollectionView;
public ICollectionView WordsCollectionView
{
get => _wordsCollectionView;
set { _wordsCollectionView = value; OnPropertyChanged(); }
}
public MainWindow()
{
InitializeComponent();
WordsCollectionView = CollectionViewSource.GetDefaultView(words);
WordsCollectionView.Filter = FilterResult;
DataContext = this;
}
public string FilterString
{
get => _filterString;
set
{
_filterString = value;
OnPropertyChanged();
FilterCollection();
}
}
public bool FilterResult(object obj)
{
string str = obj as string;
return str.Contains(FilterString);
}
private void FilterCollection()
{
_wordsCollectionView?.Refresh();
}
private void SearchBox_OnKeyUp(object sender, KeyEventArgs e)
{
FilterString = (sender as TextBox).Text;
}