使用 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!"))
复杂对象有对象集合例如
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!"))