У меня есть это «прикрепленное свойство» и оно должно быть общим. В этом примере, чтобы нормально работать, мне нужно ввести переменную типа «Сотрудник». можно создать что-то более общее, всегда от «вложенного свойства» что-то более общего, а не литье «Сотрудника», преобразованным в строку и использовать его для любого ListViewФильтр Listview WPF
public static readonly DependencyProperty FilterSourceProperty =
DependencyProperty.RegisterAttached("FilterSource", typeof (TextBox), typeof (ListViewExtension),
new FrameworkPropertyMetadata(null, OnTextBoxSet));
public static TextBox GetFilterSource(DependencyObject dObj)
{
return (TextBox)dObj.GetValue(FilterSourceProperty);
}
public static void SetFilterSource(DependencyObject dObj, TextBox value)
{
dObj.SetValue(FilterSourceProperty, value);
}
private static void OnTextBoxSet(DependencyObject dObj, DependencyPropertyChangedEventArgs e)
{
var listView = dObj as ListView;
var textBox = e.NewValue as TextBox;
if ((listView != null) && (textBox != null))
{
textBox.TextChanged += delegate(object sender, TextChangedEventArgs tcea)
{
var view = CollectionViewSource.GetDefaultView(listView.ItemsSource);
if (view == null) return;
view.Filter += item =>
{
var textFilter = ((TextBox)sender).Text;
var itemPl = (Employee)item;
return itemPl.UserName.Contains(textFilter);
};
};
}
}
В .xaml
<ListView ...>
...
...
tools:ListViewExtension.FilterSource="{Binding ElementName=txtFilter}"
...
...
</ListView
>
использовать MVVM и фильтр в вашей ViewModel – blindmeis