【发布时间】:2019-10-16 08:11:58
【问题描述】:
我有一个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;
}
【问题讨论】:
-
您是否尝试在
CollectionViewSource中使用SortDescriptions? -
在我的场景中,
SortDescription无能为力。我已经编辑了问题。