ReactiveUI RaiseAndSetIfChanged是否为列表添加,删除,修改?

这会发火吗

private List _TweetTiles; public List TweetTiles { get { return _TweetTiles; } set { this.RaiseAndSetIfChanged(ref _TweetTiles, value); } } 

当我做:

 TweetTiles.Add(new TweetTileViewModel(...)); or TweetTiles.Remove(new TweetTileViewModel(...)); 

等等

我怀疑没有,但我不确定我应该如何得到这种行为。

我有一个函数,在后台任务上运行,即返回推文。 每次我收到一条新推文时,我都会将其转换为TweetTileViewModel,并希望它在我的UI列表框中显示。

这会发火吗?

不,这只会在您设置列表时触发:

 TweetTiles = new List(); 

我有一个函数,在后台任务上运行,即返回推文。 每次我收到一条新推文时,我都会将其转换为TweetTileViewModel,并希望它在我的UI列表框中显示。

ReactiveUI通过ReactiveList类对此进行内置支持。 以下是您要如何设置它 – 首先,声明一些属性:

 ReactiveList Tweets { get; protected set; } IReactiveDerivedList TweetViewModels { get; protected set; } ReactiveCommand LoadTweets { get; protected set; } 

然后,在构造函数中:

 // Note: Only change this list on the UI thread! Tweets = new ReactiveList(); // Now, TweetViewModels will "follow around" Tweets as you add and remove items TweetViewModels = Tweets.CreateDerivedCollection( tweet => new TweetTileViewModel(tweet)); LoadTweets = new ReactiveCommand(); var newTweets = LoadTweets.RegisterAsyncTask(async _ => { // Loads the latest tweets return LoadTweetsAsync(); }); newTweets.Subscribe(newTweets => { // Add in the new tweets we downloaded. This is guaranteed by // ReactiveCommand to be on the UI thread Tweets.AddRange(newTweets); }); 

更新:修复类型错误。 要使用仅发送回调的方法,请使用AsyncSubject:

 public IObservable> GetTweetsObservable(this TwitterClient This) { var ret = new AsyncSubject>(); try { This.GetTweetsWithCallback(tweets => { ret.OnNext(tweets); ret.OnCompleted(); }); } catch (Exception ex) { ret.OnError(ex); } return ret; } 

现在,您可以将RegisterAsyncTask更改为RegisterAsync ,您就可以了!