wpf datagridをフィルタリングしたいのですが、このようにして、datagridcolumnsheaderを使用し、ヘッダーにテキストボックスを配置して、各列をフィルタリングします。
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
textSearch = (sender as TextBox).Text;
CollectionViewSource.Filter += new FilterEventHandler(FilterEvent);
}
と
private void FilterEvent(object sender, FilterEventArgs e)
{
if (propertyName == null)
return;
var a = e.Item.GetType().GetProperty("Name");
if (a != null)
{
if (textSearch != "")
{
var s = a.GetValue(e.Item, null);
if (s != null)
e.Accepted = s.ToString().Contains(textSearch);
else
e.Accepted = false;
}
else
e.Accepted = true;
}
}
idのような列では正常に機能しますが、nameのような別の列でフィルターを作成する場合は、名前だけでリストをフィルターし、過去のフィルターを保持しません。たとえば、id=2でリストをフィルターする場合などです。次に、name ='a'でフィルタリングし、リストをname='a'でフィルタリングします。