2016-08-26 86 views
1

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

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

    public string Description {get;set;} 
} 

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

我想创建一个可观察到的和知道什么时候MyClasses收集项目之一已经改变(名称或描述)的集合。

回答

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!")) 
相关问题