使用ReactiveUI监听复杂对象更改的最佳方法是什么?

时间:2016-08-26 12:44:40

标签: c# 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集合项已更改(名称或描述)。

1 个答案:

答案 0 :(得分:3)

查看docs, especially Using Change Tracking section

简而言之:

1)使用ReactiveList代替ObservableCollection,并将ChangeTrackingEnabled设为true:

// 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!"))