在 WPF 应用程序中,ObservableCollection 由 LINQ to SQL 查询填充和更新。然后使用此 ObservableCollection 中的值更新 UI 对象。
通过 LINQ to SQL 查询更新此 ObservableCollection 的操作在单独的线程中执行是否可能且合理?
如果是,在这种情况下,它会是此 ObservableCollection 的同一个实例吗? (我的意思是,如果从 LINQ datacontext 获取值的值与为更新 UI 提供值的值不同,那么我将无法更新 UI)
.Net 4.5 在 BindingOperations 类中提供了一个解决方案。
您现在可以使用 BindingOperations.EnableCollectionSynchronization 方法,如下所示:
private readonly object _personCollectionLock;
private ObservableCollection<Person> _personCollection;
public ObservableCollection<Person> PersonCollection
{
get { return _personCollection; }
set
{
_personCollection = value;
BindingOperations.EnableCollectionSynchronization(_personCollection, _personCollectionLock);
}
我刚刚在我的开发环境中尝试过这个,但是当我从后台线程更新集合时,现在一切似乎都正常工作。
对此解决方案有更深入的讨论:http://10rem.net/blog/2012/01/16/wpf-45-observable-collection-cross-thread-change-notification
该方法的 MSDN 条目位于:https://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.enablecollectionsynchronization(v=vs.110).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)