2009-04-23 87 views
3

我有一个列表<Foo>来自非WPF程序集,我试图将其数据绑定到WPF <ListBox>。最初,列表项正确显示,但是当我将新项目添加到列表<Foo>时,列表框不会添加列表项目。如何告诉列表框重新绑定/更新/刷新数据并显示新项目?WPF数据绑定手册更新

回答

10

虽然使用一个ObservableCollection是最好的方式,回答问题的实际,手动更新的方法是调用BindingExpression.UpdateTarget

4

您应该使用ObservableCollection来代替,然后您会自动获取更新。

+0

我可以在非WPF程序集中使用ObservableCollection吗? – harriyott 2009-04-23 15:57:09

+0

是的,如果你包含PresentationBase(我认为,该类在System.Collections.ObjectModel中,但impl在PresetationBase中);或者如果你想获得相同的功能,通过实现INotifyCollectionChanged来创建你自己的ObservableCollection。 – Scott 2009-04-23 16:13:33

2

感谢张贴这个答案。即使您使用ObservableCollection,也可能需要使用BindingExpression.UpdateTarget。如果集合不在UI线程中,则可能是这种情况。我一直在编写一些多线程的WPF应用程序,当我将模型代码移动到另一个线程时,我发现自己不得不去除数据绑定,因为我不能指望更新系统真正起作用。尽管我发现数据绑定是一个很好的概念,但我认为数据绑定系统的不透明性一直是我采用它的真正障碍。 (对不起,咆哮!)再次感谢,亚当。