首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新ListCollectionView?

如何更新ListCollectionView?
EN

Stack Overflow用户
提问于 2020-10-20 12:45:24
回答 1查看 286关注 0票数 0

上下文是,我想在视图中向ListView公开一个来自ViewModel的ListCollectionView;ViewModel缓慢地更新一个ObservableCollection (填充集合需要几秒钟时间)。

因此,我希望在以这种方式更新ListCollectionView之后更新ObservableCollection

代码语言:javascript
复制
MyObservableCollection.CollectionChanged += CollectionChanged;

private void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    MyListCollectionView.AddNewItem(e.NewItems);
    MyListCollectionView.CommitNew();
}

我试图更新一个ListCollectionView,但是即使使用List<>也失败了。我该怎么做?

代码语言:javascript
复制
[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

代码语言:javascript
复制
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中:

代码语言:javascript
复制
private object _o = new object();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 12:51:14

Setup()方法中的Setup()类型更改为实现IList并实际为Add方法提供实现的List<T>或任何其他集合:

为什么System.Array类实现IList而不提供Add()

您不能向数组中“添加”某些内容。

也不清楚你的测试应该做什么?验证内置ListCollectionView类型的功能吗?您应该集中精力测试您的代码,而不是测试框架类型。

*最后,我想在更新ListCollectionView之后更新ObservableCollection

然后包装ObservableCollection

代码语言:javascript
复制
_sut = new ListCollectionView(observableCollection);

或者直接修改ObservableCollection。您似乎不需要在这里使用ListCollectionView。集合视图是框架在绑定到源集合时为您创建的东西。有关更多信息,请参考文档

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64445459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档