过滤ObservableCollection?当我将ListBox直接绑定到ObservableCollection时,我会在我的ListBox中显示实时更新,但是一旦我将其他LINQ方法添加到组合中,我的ListBox就不再收到有关ObservableCollection的任何更改的通知。这里,我举个例子来说明;publicpartialclassMainPage:PhoneApplicationPage{ObservableCollectionWords=newObservableCollection();publicMainPage(){InitializeComponent();listBox1.ItemsSource=单词;}privatevoidAddButton_Click(objectsender,RoutedEventArgse){Words.Add(DateTime.Now.ToString());}}在这里,我向一个简单的页面添加了一个按钮和一个列表框,单击按钮使新项目立即出现在列表框中。但是如果我改变listBox1.ItemsSource=Words;到listBox1.ItemsSource=Words.Where(w=>w.Contains(":"));ListBox不再更新。我怎样才能在我的ObservableCollection和ListBox之间添加一个“过滤器”并且仍然能够更新而不必再次设置.ItemsSource?尝试像这样使用CollectionViewSource:WordsView=newCollectionViewSource();WordsView.Filter+=Words_Filter;WordsView.Source=单词;//...voidWords_Filter(objectsender,FilterEventArgse){if(e.Item!=null)e.Accepted=((string)e.Item).Contains(":");为什么它不起作用:listBox1.ItemsSource=Words.Where(w=>w.Contains(":"));您没有绑定ObservableCollection,而是绑定了Linq生成的IEnumerable。这个新的“列表”不会将列表中的更改通知ListBox。你应该使用ICollectionView.Filter属性:以上是C#学习教程:过滤ObservableCollection?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——ICollectionViewview=CollectionViewSource.GetDefaultView(Words);view.Filter=WordFilter;...boolWordFilter(objecto){stringw=(string)o;returnw.Contains(":")}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
