Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DynamicData—如何使用源列表<&燃气轮机;使用数据网格_C#_.net_Dynamic Data_Reactiveui - Fatal编程技术网

C# DynamicData—如何使用源列表<&燃气轮机;使用数据网格

C# 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

我正在尝试使用dynamicata
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);
});