这会不会发生火灾
private List<TweetTileViewModel> _TweetTiles;
public List<TweetTileViewModel> TweetTiles
{
get { return _TweetTiles; }
set { this.RaiseAndSetIfChanged(ref _TweetTiles, value); }
}
当我这样做时:
TweetTiles.Add(new TweetTileViewModel(...)); or
TweetTiles.Remove(new TweetTileViewModel(...));
等
我怀疑没有,但我不确定我应该如何得到这种行为。
我有一个在后台任务上运行的函数,它正在返回推文。每次我收到一条新推文时,我都会将其转换为TweetTileViewModel,并希望它显示在我的UI列表框中。
答案 0 :(得分:1)
这会引发火灾吗?
不,这只会在您设置列表时触发:
TweetTiles = new List<TweetTileViewModel>();
我有一个在后台任务上运行的函数,它正在返回推文。每次我收到一条新推文时,我都会将其转换为TweetTileViewModel,并希望它显示在我的UI列表框中。
ReactiveUI通过ReactiveList
类对此进行了内置支持。以下是您要如何设置它 - 首先,声明一些属性:
ReactiveList<Tweet> Tweets { get; protected set; }
IReactiveDerivedList<TweetTileViewModel> TweetViewModels { get; protected set; }
ReactiveCommand LoadTweets { get; protected set; }
然后,在构造函数中:
// Note: Only change this list on the UI thread!
Tweets = new ReactiveList<Tweet>();
// 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<List<Tweet>> GetTweetsObservable(this TwitterClient This)
{
var ret = new AsyncSubject<List<Tweet>>();
try {
This.GetTweetsWithCallback(tweets => {
ret.OnNext(tweets);
ret.OnCompleted();
});
} catch (Exception ex) {
ret.OnError(ex);
}
return ret;
}
现在,您可以将RegisterAsyncTask
更改为RegisterAsync
,您就可以了!