代码之家  ›  专栏  ›  技术社区  ›  4est

从JavaScriptSerializer将项绑定到ComboBox

  •  0
  • 4est  · 技术社区  · 6 年前

    我需要改变以下方法:

    public static IList<SomeItem> GetProjects() {
     List<SomeItem> projects = new List<SomeItem>();    
     string result = Task.Run(() => TestMethodAsync("getProjects",GetApiKeyAsync())).GetAwaiter().GetResult();
     MyObject resultparsed = new JavaScriptSerializer().Deserialize<MyObject>(result);
    
      foreach (SomeItem item in resultparsed.result.items)
      {
       projects.Add(item);
      }
      return projects;
    }
    

    这些项目将自动添加到 ComboBox :

    这是来自 XAML :

    <ComboBox ItemsSource="{Binding Path=ProjectList}" IsSynchronizedWithCurrentItem="True" />
    

    这里我想修改上面的代码 C:

    public List<string> ProjectList { get; internal set; }
    public static IList<SomeItem> GetProjects()
    {
     ProjectList = new List<string>;//???
    
     string result = Task.Run(() => TestMethodAsync("getProjects",GetApiKeyAsync())).GetAwaiter().GetResult();
     MyObject resultparsed = new JavaScriptSerializer().Deserialize<MyObject>(result);
    
      foreach (SomeItem item in resultparsed.result.items)
      {
        ProjectList.Add(item);//??
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    替换 List<string> 用一个 ObservableCollection<string> :

    public ObservableCollection<string> ProjectList { get; internal set; }
    

    不像一个 List<T> ,一个 ObservableCollection<T> 在添加或删除项时向UI提供通知。

    然后可以像这样填充源集合:

    public ObservableCollection<string> ProjectList { get; internal set; } = new ObservableCollection<string>();
    public async Task PopiuateProjectListAsync()
    {
        ProjectList.Clear();
        MyObject resultparsed = await Task.Run(() =>
        {
            string result = TestMethodAsync("getProjects", GetApiKeyAsync());
            return new JavaScriptSerializer().Deserialize<MyObject>(result);
        });
    
        foreach (SomeItem item in resultparsed.result.items)
        {
            ProjectList.Add(item.SomeStringProperty);
        }
    }