在MVVM中从后台线程更新listbox
本文关键字:线程 更新 listbox 后台 MVVM | 更新日期: 2023-09-27 18:15:53
我有一个ListBox在我的视图是DataBinded到一个ObservableCollection在我的ViewModel。但是我的视图没有更新即使我在ViewModel
中加载了数据我使用这个委托来加载列表的数据:
public ObservableCollection<TwitterElement_> MyCollection_
{
get;
private set;
}
[...]
public MainViewModel()
{
this.MyList_ = new List<Object>();
this.MyCollection_ = new ObservableCollection<Object>();
this.loadedCommand = new RelayCommand(async() =>
{
this.MyList_= await FirstLoad();
foreach (Element_ t in MyList_)
{
this.MyCollection_.Add(t);
}
});
}
public async Task<List<Object>> FirstLoad()
{
var tcs = new TaskCompletionSource<List<Object>>();
var client = new RestSharp.RestClient("https://Example.com");
var request = new RestSharp.RestRequest("/request", Method.GET);
client.ExecuteAsync(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
Task<List<Object>> FirstTask = Task.Factory.StartNew<List<Object>>(() => JsonConvert.DeserializeObject<List<Object>>(response.Content));
Task<List<Object>> SecondTask = FirstTask.ContinueWith((ft) =>
{
//Operations That I removed for more clarity...
[...]
return ft.Result;
});
tcs.SetResult(SecondTask.Result);
}
else
{
}
});
return await tcs.Task;
}
但我的ListBox是不更新的数据,即使我转移对象从列表到ObservableCollection,这应该对UI线程的行为,我应该怎么做?
您是否使用Binding
将您的集合绑定到ListBox
或手动设置ItemsSource
属性?
如果使用Binding
完成,则需要将具有ListBox
的页面的DataContext
设置为视图模型。DataContext = [instance of MainViewModel]