上下文是,我想在视图中向ListView公开一个来自ViewModel的ListCollectionView;ViewModel缓慢地更新一个ObservableCollection (填充集合需要几秒钟时间)。
因此,我希望在以这种方式更新ListCollectionView之后更新ObservableCollection:
MyObservableCollection.CollectionChanged += CollectionChanged;
private void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
MyListCollectionView.AddNewItem(e.NewItems);
MyListCollectionView.CommitNew();
}我试图更新一个ListCollectionView,但是即使使用List<>也失败了。我该怎么做?
[TestClass]
public class ListViewTests
{
private ListCollectionView _sut;
[TestInitialize]
public void Setup()
{
var toadd = new List<int> {};
_sut = new ListCollectionView(toadd);
}
[TestMethod]
public void AddItem()
{
var toadd = new List<int> { 1,2,3 };
_sut.AddNewItem(toadd);
_sut.CommitNew();
}
}System.InvalidOperationException:此视图不允许使用“AddNewItem”。
有关更多细节,请了解如何更新ObservableCollection
Parallel.ForEach(ShTiffFiles, file =>
{
var sht = new ShutterTiff(file, _aesService); // slow (small Model)
var shtv = new ShutterTiffVignette(sht, _fastCache); // slow (small ViewModel)
lock (_o) // make it thread safe
{
Application.Current.Dispatcher.Invoke(() =>
{
ShutterTiffObservableCollection.Add(shtv);
});
}
});在ViewModel中:
private object _o = new object();发布于 2020-10-20 12:51:14
将Setup()方法中的Setup()类型更改为实现IList并实际为Add方法提供实现的List<T>或任何其他集合:
为什么System.Array类实现IList而不提供Add()
您不能向数组中“添加”某些内容。
也不清楚你的测试应该做什么?验证内置ListCollectionView类型的功能吗?您应该集中精力测试您的代码,而不是测试框架类型。
*最后,我想在更新ListCollectionView之后更新ObservableCollection
然后包装ObservableCollection
_sut = new ListCollectionView(observableCollection);或者直接修改ObservableCollection。您似乎不需要在这里使用ListCollectionView。集合视图是框架在绑定到源集合时为您创建的东西。有关更多信息,请参考文档。
https://stackoverflow.com/questions/64445459
复制相似问题