C# DynamicData—如何使用源列表<&燃气轮机;使用数据网格
我正在尝试使用dynamicataC# DynamicData—如何使用源列表<&燃气轮机;使用数据网格,c#,.net,dynamic-data,reactiveui,C#,.net,Dynamic Data,Reactiveui,我正在尝试使用dynamicataSourceList作为DataGrid的数据源 我读过的所有文档都说明我应该按照以下思路实现一些东西 private readonly SourceList<MyThing> Things; public IObservableCollection<MyThing> ThingsBindable { get; } Things = new SourceList<MyThing>(); ThingsBindable = ne
SourceList
作为DataGrid
的数据源
我读过的所有文档都说明我应该按照以下思路实现一些东西
private readonly SourceList<MyThing> Things;
public IObservableCollection<MyThing> ThingsBindable { get; }
Things = new SourceList<MyThing>();
ThingsBindable = new ObservableCollectionExtended<MyThing>();
Things
.Connect()
.Bind(ThingsBindable)
.Subscribe();
。。。但是现在,当我通过UI添加一个项目时,在SourceItems.EditDiff(Items)
上抛出以下错误
无法在CollectionChanged事件期间更改ObservableCollection
奇怪的是,尽管抛出了错误,底层集合似乎还是添加了新项。您是否执行了任何多线程添加到源列表中的操作?顺便说一句,如果只添加了一个线程,就只需要ObservableCollectionExtended。通过在可绑定集合上执行ToObservableChangeSet,可以获得可观察的更改集。然后,您可以执行EditDiff以将更改返回到主应用程序中SourceList@glenn再次感谢你的帮助。请参阅我更新的问题:0)动态数据非常适合以线程安全的方式使用linq样式的运算符处理动态更改的集合。根据Glenn的问题,除非你正在做需要线程安全性的事情,否则直接使用可观察集合可能会更好,因为DD不会试图取代标准的可观察集合。@RolandPheasant-谢谢你的回答(顺便说一句,很棒的库!!)。我想使用DynamicATA,因为我有几个不同的数据源,当呈现给用户时,需要将它们合并到一个列表中。。。我认为DynamicData非常适合,但没有理由不使用经典的
ObservableCollection
!谢谢,我现在明白了。您有复杂的需求,因为数据来自多个来源。DD不直接处理的部分是向数据网格添加行。我以前使用的一个解决方案是禁用数据网格上的新行,并管理在代码中添加新行。实现起来有点棘手,因为您需要确定是什么触发了添加新行。在我的例子中,当用户编辑新行并按enter键时,我将提交该行并手动添加新行。
var collectionChanges = Items.ToObservableChangeSet();
//
collectionChanges.Subscribe((changeSet) =>
{
SourceItems.EditDiff(Items);
});