使用 ReactiveUI 监听复杂对象变化的最佳方式是什么?

What is the best way to listen for complex object changes, using ReactiveUI?

复杂对象有对象集合例如

public class MyClass
{ 
    public string Name { get;set;}

    public string Description {get;set;}
}

public class MyViewModel
{
    public ObservableCollection<MyClass> MyClasses {get;set;}
}

我想创建一个 observable 并知道 MyClasses 集合项之一何时发生更改(名称或描述)。

看看docs, especially Using Change Tracking section

简而言之:

1) 使用 ReactiveList 而不是 ObservableCollection,并将 ChangeTrackingEnabled 设置为真:

// in MyViewModel constructor
this.MyClasses = new ReactiveList<MyClass>()
{
    ChangeTrackingEnabled = true,
};

2) MyClass 应该引发 PropertyChanged 事件。最简单的方法是让它从 ReactiveObject 派生:

public class MyClass : ReactiveObject
{ 
    private string _name;
    public string Name 
    {
        get { return _name; }
        set { this.RaiseAndSetIfChanged(ref _name, value); 
    }

    private string _description;
    public string Description
    {
        get { return _description; }
        set { this.RaiseAndSetIfChanged(ref _description, value); 
    }
}

3) 使用列表中的 ItemChanged 属性

this.MyClasses.ItemChanged.Subscribe(_ => Console.WriteLine("Changed!"))