C# wpf中的多列自动搜索用户控制

C# wpf中的多列自动搜索用户控制,c#,wpf,vb.net,user-controls,wpf-controls,C#,Wpf,Vb.net,User Controls,Wpf Controls,我需要创建一个自动搜索控件,它将结果显示为与此相同的行。但是,我不需要这里的图形和复选框。一个简单的类似listview的外观就可以了 请建议如何使用WPF创建用户控件。如果使用MVVM方法,可以执行以下操作: 将搜索文本框文本成员、ListView的ItemsSource和SelectedItem绑定到ViewModel 在文本框的绑定上设置'UpdateSourceTrigger=PropertyChanged' 在属性的setter中,TextBox绑定到添加搜索ItemsSource集

我需要创建一个自动搜索控件,它将结果显示为与此相同的行。但是,我不需要这里的图形和复选框。一个简单的类似listview的外观就可以了


请建议如何使用WPF创建用户控件。

如果使用MVVM方法,可以执行以下操作:

  • 将搜索文本框文本成员、ListView的ItemsSource和SelectedItem绑定到ViewModel
  • 在文本框的绑定上设置'UpdateSourceTrigger=PropertyChanged'
  • 在属性的setter中,TextBox绑定到添加搜索ItemsSource集合并设置SelectedItem绑定属性的逻辑
大概是这样的:

XAML:


代码:

公共类视图模型:INotifyPropertyChanged
{
公共字符串搜索项
{
获取{return searchTerm;}
设置{
搜索项=值;
SelectedSearchItem=SourceCollection.FirstOrDefault(foo=>foo.Name.Contains(searchTerm));
}
}
public Foo SelectedSearchItem
{ 
获取{return selecedSearchItem;}
设置{
selectedSearchItem=值;
//增加财产改变
}
}
公共ObservableCollection源集合{get;set;}
}
有一篇关于排序、筛选和分组ListView的好文章

基本上设置为ListCollectionView。然后可以使用来筛选ListView

<TextBox Text="{Binding Path=SearchTerm, UpdateSourceTrigger=PropertyChanged}"/>

<ListView ItemsSource="{Binding Path=SourceCollection}" SelectedItem="{Binding Path=SelectedSearchItem, Mode=TwoWay}" />
public class ViewModel : INotifyPropertyChanged
{
     public string SearchTerm 
     {
          get { return searchTerm; }
          set {
                searchTerm = value;
                SelectedSearchItem = SourceCollection.FirstOrDefault(foo => foo.Name.Contains(searchTerm));
          }
     }

     public Foo SelectedSearchItem 
     { 
           get { return selecedSearchItem; } 
           set {
                 selectedSearchItem = value;
                 // Raise PropertyChanged 
           }
     }


     public ObservableCollection<Foo> SourceCollection { get; set;}
}