在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线程的行为,我应该怎么做?

在MVVM中从后台线程更新listbox

您是否使用Binding将您的集合绑定到ListBox或手动设置ItemsSource属性?

如果使用Binding完成,则需要将具有ListBox的页面的DataContext设置为视图模型。DataContext = [instance of MainViewModel]