如何从 IChangeSet 中提取单个项目?

How to extract single item from IChangeSet?

我经常需要过滤我的可观察连接并以类似于 FirstOrDefaultIEnumerable 上执行的方式从中获取单个项目。这对 SelectedItem 属性 超级有用。如何在反应中做到这一点 UI?

示例代码:

IObservabel<T> = _mySourceList
.Connect()
.Top(1)
.?()

有函数 MaximumMinimum,但它们只适用于具体类型。

如果您的目标是在发生更改时获取源列表的第一项(或默认项),则它将是:

IObservabel<T> = _mySourceList
.Connect()
.Select(_ => _mySourceList.Items.FirstOrDefault());

您可以使用 ToCollection()IObservable<IChangeSet> 转换为 IObservable<IReadOnlyCollection>。从那里它是一个简单的 First() 调用(或任何你需要的)来获取列表的第一个元素。请参阅以下示例:

SourceList<int> list = new SourceList<int>();
IObservable<int?> observeFirst = list.Connect()
    .ToCollection()
    .Select(it => it.Any()
        ? (int?)it.First()
        : null);
        
IDisposable disposable = observeFirst.Subscribe(it => {
    Console.WriteLine("The 'first' element is: "+it);
});

Console.WriteLine("Start");

list.Add(4);
list.Add(9);
list.RemoveAt(0);
list.Insert(0, 12);
list.Insert(1, 20);
list.Insert(0, 50);
list.RemoveAt(0);
list.Clear();

disposable.Dispose();
Console.WriteLine("End");

这将生成以下输出:

Start
The 'first' element is: 4
The 'first' element is: 4
The 'first' element is: 9
The 'first' element is: 12
The 'first' element is: 12
The 'first' element is: 50
The 'first' element is: 12
The 'first' element is: 
End