我有一个使用 MVVM 模式的 WPF 项目。
在特定的视图模型中,我使用后台任务(任务类)定期填充 ObservableCollection。
我使用下面的代码来实际填充集合:
private void InitialiseAssignablePermissions()
{
var assignablePermissions = DetermineAssignablePermissions();
CurrentDispatcher.Invoke(() =>
{
foreach (var ap in assignablePermissions)
{
AssignablePermissions.Add(ap);
}
});
}
这完美地工作,我的单元测试运行愉快,一切都变绿了。
但是,如果我有一个连接到 ObservableCollection 的 ICollectionView,当我运行测试时,我会得到一个跨线程异常并且测试失败。当我第一次尝试将项目添加到集合中时会发生异常。尽管在执行项目时,代码仍然可以愉快地运行。我需要集合视图,因为我想过滤项目。
例外是:
This type of CollectionView does not support changes to its
SourceCollection from a thread different from the Dispatcher thread.
CurrentDispatcher 类是我为单元测试添加的一个简单类:
internal static class CurrentDispatcher
{
internal static void Invoke(Action action)
{
if (App.Current != null)
App.Current.Dispatcher.Invoke(action);
else
action();
}
}
如何添加集合视图并仍然进行单元测试?