根据项目 属性 更新使用 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();
似乎对我有用。
我有下一个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();
似乎对我有用。