收藏ViewSource通过在文本框中输入来过滤列表框
我在WPF中列出了用户名和姓氏列表框。我有一个文本框,并且我正在尝试按名称进行过滤。下面是我想:(当我在文本框中我打字被过滤为Nothing)收藏ViewSource通过在文本框中输入来过滤列表框
这里是我的VM
#region Members
private CollectionViewSource usercvs = new CollectionViewSource();
private string searchString;
#endregion
#region Properties
public string SearchFilter
{
get
{
return this.searchString;
}
set
{
if (!string.IsNullOrEmpty(this.searchString))
AddFilter();
usercvs.View.Refresh();
this.searchString = value;
}
}
#endregion
#region Methods
private void AddFilter()
{
usercvs.Filter -= new FilterEventHandler(Filter);
usercvs.Filter += new FilterEventHandler(Filter);
}
private void Filter(object sender, FilterEventArgs e)
{
// see Notes on Filter Methods:
var src = e.Item as User;
if (src == null)
e.Accepted = false;
else if (src.LastName != null && !src.LastName.Contains(SearchFilter))
e.Accepted = false;
}
#endregion
}
}
添加一个附加属性,以您的视图模型暴露出CollectionViewSource并绑定你的列表框该财产。
public CollectionViewSource FilteredUsers{
get {
return usercvs.View;
}
}
的ObservableCollection
当你申请的任何过滤器的CollectionViewSource
没有改变,那么你将永远看到的所有项目。 Filter将应用于CollectionViewSource,过滤的结果可以通过该类的属性View来访问。
我做了财产,当我设置列表框绑定到属性没有被返回,但是当我在过滤器方法中设置断点数据显示。 – KeyboardFriendly 2013-04-09 13:36:56
与此
public ICollectionView FilteredUsers
{
get
{
return usercvs.View;
}
}
是的,这是正确的。我忘了返回CollectionViewSource的视图 – Jehof 2013-04-09 13:57:16
再次感谢,我编辑了代码并缩短了它。 – KeyboardFriendly 2013-04-09 13:59:51
得到它贵的ListBox绑定到该属性的用户(的ObservableCollection)? – Jehof 2013-04-09 11:31:57
是的,对不起,我应该把代码中的列表框xaml。我会更新代码。 – KeyboardFriendly 2013-04-09 11:34:35