【问题标题】:Binding items to ComboBox from JavaScriptSerializer从 JavaScriptSerializer 将项目绑定到 ComboBox
【发布时间】:2018-08-21 12:02:51
【问题描述】:

我需要更改以下方法:

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);//??
  }
}

【问题讨论】:

    标签: c# wpf list data-binding combobox


    【解决方案1】:

    List&lt;string&gt; 替换为ObservableCollection&lt;string&gt;

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

    List&lt;T&gt; 不同,ObservableCollection&lt;T&gt; 在添加或删除项目时向 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);
        }
    }
    

    【讨论】:

    • 那么 GetProjects 方法呢?可以告诉我如何更正修改它吗?
    • 我猜 SomeItem 有一些你想在 ComboBox 中显示的字符串属性?
    • ProjectList.Clear & Add 我有同样的错误:“非静态字段需要对象引用....”
    • 抱歉,PopiuateProjectListAsync() 方法应该是静态的。我修改了这个。
    猜你喜欢
    • 2021-01-23
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多