C# 如何更新ListCollectionView?
上下文是我想从ViewModel的视图aC# 如何更新ListCollectionView?,c#,wpf,C#,Wpf,上下文是我想从ViewModel的视图aListCollectionView中公开一个ListView;该ViewModel缓慢更新一个可观察集合(填充集合需要几秒钟) 因此,我想在可观察收集更新后更新列表收集视图: MyObservableCollection.CollectionChanged += CollectionChanged; private void CollectionChanged(object sender, NotifyCollectionChangedEventArg
ListCollectionView
中公开一个ListView
;该ViewModel缓慢更新一个可观察集合
(填充集合需要几秒钟)
因此,我想在可观察收集
更新后更新列表收集视图
:
MyObservableCollection.CollectionChanged += CollectionChanged;
private void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
MyListCollectionView.AddNewItem(e.NewItems);
MyListCollectionView.CommitNew();
}
我试图更新ListCollectionView
,但即使使用列表
,也无法更新。我该怎么做
[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();
}
}
在ViewModel中:
private object _o = new object();
将
Setup()
方法中的toadd
类型更改为List
或实现IList
并实际提供Add
方法实现的任何其他集合:
不能向数组中“添加”某些内容
也不清楚你的测试应该做什么?验证内置的ListCollectionView
类型的功能?您应该专注于测试代码,而不是测试框架类型
*最后,我想在ObservableCollection更新后更新ListCollectionView
然后将可观察集合
包装起来:
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);
});
}
});
_sut = new ListCollectionView(observableCollection);
或者直接修改
可观测采集
。您似乎不需要在此处使用ListCollectionView
。集合视图是框架在绑定到源集合时为您创建的。有关更多信息,请参阅。将Setup()
方法中的toadd
的类型更改为列表
或实现IList
并实际提供添加
方法实现的任何其他集合:
不能向数组中“添加”某些内容
也不清楚你的测试应该做什么?验证内置的ListCollectionView
类型的功能?您应该专注于测试代码,而不是测试框架类型
*最后,我想在ObservableCollection更新后更新ListCollectionView
然后将可观察集合
包装起来:
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);
});
}
});
_sut = new ListCollectionView(observableCollection);
或者直接修改
可观测采集
。您似乎不需要在此处使用ListCollectionView
。集合视图是框架在绑定到源集合时为您创建的。有关更多信息,请参阅。我非常喜欢你的答案。从中学到了很多,也许她只是想在框架中为一些新的“东西”做一些游戏测试,而不是做一些实际的测试tests@styx:也许吧。这就是为什么我写了“unclark”。@Soleil MathieuPrévot:TheListCollectionView
将数组包装在Setup()
方法中。我编辑了我的答案来澄清这一点,因为你在测试方法中也添加了一个。我真的很喜欢你的答案。从中学到了很多,也许她只是想在框架中为一些新的“东西”做一些游戏测试,而不是做一些实际的测试tests@styx:也许吧。这就是为什么我写了“unclark”。@Soleil MathieuPrévot:TheListCollectionView
将数组包装在Setup()
方法中。我编辑了我的答案以澄清这一点,因为在测试方法中也有一个toadd
_sut.AddNewItem(toadd)如果在更新后将int[]
更改为List
,则code>将不起作用:以及为什么。。。为什么要使用ListCollectionView
?相反,可观察采集
直接采集。。。如果您真的需要使用LCV,为什么不使用MyListCollectionView=new ListCollectionView(MyObservableCollection)
?那么您不需要安装集合更改事件handler@Selvin这是正确的观点。我不需要担心ListCollectionView
,我只需要添加到ObservableCollection
。那么,AddNewItem
的作用是什么?@mm8你是在暗示有几种方法可以更新ListCollectionView吗?@mm8我确实错过了那句话。不过,在这种情况下,AddNewItem(Object)的作用是什么?除了mm8答案:var toadd=newlist{1,2,3}_sut.AddNewItem(toadd)如果在更新后将int[]
更改为List
,则code>将不起作用:以及为什么。。。为什么要使用ListCollectionView
?相反,可观察采集
直接采集。。。如果您真的需要使用LCV,为什么不使用MyListCollectionView=new ListCollectionView(MyObservableCollection)
?那么您不需要安装集合更改事件handler@Selvin这是正确的观点。我不需要担心ListCollectionView
,我只需要添加到ObservableCollection
。那么,AddNewItem
的作用是什么?@mm8你是在暗示有几种方法可以更新ListCollectionView吗?@mm8我确实错过了那句话。不过,在这种情况下,AddNewItem(对象)的用途是什么?