C# DynamicData 和 WhenPropertyChanged - 初始化集合时跳过初始值

C# DynamicData and WhenPropertyChanged - skip initial value when collection is initialized

我有一个简单的代码:

class ItemViewModel : ReactiveObject
{
    private string _name;
    private string _value;

    public ItemViewModel(string name, string value)
    {
        _name = name;
        _value = value;
    }

    public string Name
    {
        get => _name;
        set => this.RaiseAndSetIfChanged(ref _name, value);
    }

    public string Value
    {
        get => _value;
        set => this.RaiseAndSetIfChanged(ref _value, value);
    }
}

IObservable<IChangeSet<ItemViewModel>> changeSet = CreateChangeSet();

我想对更改集中任何对象中 Value 属性 的任何更改做出反应,并做一些具有新价值的事情。我这样试过:

changeSet 
    .WhenPropertyChanged(x => x.Value)
    .DistinctUntilChanged()
    .Subscribe(value =>
    {
         // do sth with value
    });

但是 WhenPropertyChanged 在初始化集合时为每个项目提供初始值,我想避免这种情况。我该怎么做?

您只需将notifyOnInitialValue 参数设置为false。默认情况下是正确的。我刚刚在沙盒控制台应用程序中尝试进行健全性检查,它确实按预期工作。

changeSet
    .WhenPropertyChanged(x => x.Value, notifyOnInitialValue: false)

来源:https://github.com/reactiveui/DynamicData/blob/63960b0fa7bd0362c40e137498cd0014ba02f3dc/src/DynamicData/Binding/NotifyPropertyChangedEx.cs#L59