根据项目 属性 更新使用 DynamicData 创建的 ReadOnlyObservableCollection

Update ReadOnlyObservableCollection created with DynamicData based on item's property

我有下一个class:

public class StateObject
{
   public bool IsEnabled { get; set; }
   public string Value { get; set; }
}

稍后在代码中我有一些此类对象的源作为 Observable,例如通过 Observable.Interval.

创建的
var interval = TimeSpan.FromSeconds(1);
IObservable<StateObject> source = Observable.Interval(interval).Select(x => new StateObject { Value = "Test", IsEnabled = x % 2 == 0})

我需要将此 observable 绑定到 ReadOnlyObservableCollection,同时考虑到 IsEnabled 属性,这样可以从集合中添加或删除项目。所以,如果是IsEnabled == true,应该添加,否则如果已经在集合中,应该删除。

我已尝试使用以下代码来获取我需要的内容,但无法删除项目,只能将它们添加到集合中。

private readonly ReadOnlyObservableCollection<string> _values;
public ReadOnlyObservableCollection<string> Values => _values;

source
      .ToObservableChangeSet()
      .Filter(x => x.IsEnabled)
      .Transform(x => x.Value)
      .Bind(out _values)
      .Subscribe();

我有另一个想法让它与来自 DynamicData 的代理 SourceList 一起工作,但我只是想知道是否可以在不创建此代理 SourceList 的情况下实现我需要的功能。

尝试使用带有键选择器的 ToObservableChangeSet 的重载。

source
  .ToObservableChangeSet(x => x.Value)
  .Filter(x => x.IsEnabled)
  .Transform(x => x.Value)
  .Bind(out _values)      
  .Subscribe();

似乎对我有用。