RefreshItems
从 ViewModel 的构造函数中调用,并且在用户希望时调用(RefreshCommand
单击按钮)。
Delete 也绑定到一个DeleteCommand
.
我想刷新一个新线程中的项目,因为一些动画否则不流畅。
因此绑定不会发生在调度程序的线程上,但删除会发生并且删除会引发异常(参见代码)。
(TPL(异步/等待)不是选项,因为必须支持 XP。)
public void RefreshItems()
{
new Thread(new ThreadStart(() =>
{
IsRefreshing = true;
var items = _db.GetItems();
var itemsCollectionView = CollectionViewSource
.GetDefaultView(new ObservableCollection<ItemType>(items));
Items = itemsCollectionView;
IsRefreshing = false;
})).Start();
}
private void Delete(ItemType item)
{
_db.DeleteItem(item);
var items = (ObservableCollection<ItemType>)Items.SourceCollection;
// InnerException: NotSupportedException
// Message: This type of CollectionView does not support changes
// to its SourceCollection from a thread different from
// the Dispatcher thread.
items.Remove(item);
}