【问题标题】:Update a ListBoxFrom a Background Thread in MVVM从 MVVM 中的后台线程更新列表框
【发布时间】:2014-09-22 14:25:43
【问题描述】:

我的 View 中有一个 ListBox,它数据绑定到 ViewModel 中的 ObservableCollection。但即使我在 ViewModel 中加载数据后,我的 View 也没有更新

我使用这个委托来加载列表的数据:

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;
}

但是,即使我将对象从 List 传输到应该作用于 UI 线程的 ObservableCollection,我的 ListBox 也没有更新数据,我该怎么办?

【问题讨论】:

  • 你能在你绑定的地方显示你的 XAML 吗?

标签: c# .net multithreading windows-phone-8 mvvm


【解决方案1】:

您的收藏是使用Binding 绑定到ListBox 还是手动设置ItemsSource 属性?

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

【讨论】:

  • 我使用 MVVMight Toolkit 绑定是这样完成的:DataContext="{Binding Main, Source={StaticResource Locator}}">
  • 定位器是您的主视图模型的实例,对吧?看起来它应该可以工作。也许您的 XAML 中有错字?
  • 我再次检查,错字在我的 xaml 中无处不在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多