当我将 ListBox 直接绑定到 ObservableCollection 时,我会在 ListBox 中显示实时更新,但是一旦我在混合中添加其他 LINQ 方法,我的 ListBox 就不再收到 ObservableCollection 的任何更改通知。
这里我举个例子来说明一下;
public partial class MainPage : PhoneApplicationPage
{
ObservableCollection<String> Words = new ObservableCollection<string>();
public MainPage()
{
InitializeComponent();
listBox1.ItemsSource = Words;
}
private void AddButton_Click(object sender, RoutedEventArgs e)
{
Words.Add(DateTime.Now.ToString());
}
}
在这里,我向一个简单的页面添加了一个按钮和一个列表框,单击按钮使新项目立即出现在列表框中。
但是,如果我从
listBox1.ItemsSource = Words;
to
listBox1.ItemsSource = Words.Where(w => w.Contains(":"));
ListBox 不再更新。
如何在 ObservableCollection 和 ListBox 之间添加“过滤器”,并且仍然可以更新它而无需再次设置 .ItemsSource?
尝试像这样使用 CollectionViewSource:
WordsView = new CollectionViewSource();
WordsView.Filter += Words_Filter;
WordsView.Source = Words;
// ...
void Words_Filter(object sender, FilterEventArgs e)
{
if (e.Item != null)
e.Accepted = ((string)e.Item).Contains(":");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)