【问题标题】:ComboBox binded to observable collection how to add 1 extra valueComboBox 绑定到 observablecollection 如何添加 1 个额外值
【发布时间】:2015-12-16 11:47:33
【问题描述】:

我有一个通过

绑定到可观察集合的组合框
cmbBladesTab1.ItemsSource = easyRunData.olstBlades;

效果很好。 我希望组合框绑定到所有这些值加一。

例如 easyRunData.olstBlades; 包含 "PL1", "PL2", "PL3", "PL4"

cmbBladesTab1 包含"ALL BLADES", "PL1", "PL2", "PL3", "PL4"

--添加所有工作都必须从代码隐藏中完成

感谢您的帮助。

【问题讨论】:

标签: c# wpf combobox bind observablecollection


【解决方案1】:

您可以添加一个属性,将特定项目添加到列表中。

ObservableCollection<string> myCollection;
ObservableCollection<string> MyCollectionViewProp
{
    get
    {
        var tempCollection = new ObservableCollection<string>(myCollection);
        tempCollection.Add("Extra element");
        return tempCollection;
    }
}

根据集合的大小和访问次数,这可能是最简单的编程解决方案。如果您需要经常访问它,这个解决方案会变得更糟,因为它每次都会创建一个新集合。 在这种情况下,您可能应该监听 Co​​llectionChanged 事件并保留一个单独的冗余列表。

【讨论】:

  • @Florian Proksch 可能有用!但是那个集合可以序列化吗?然后我将不得不处理这两个集合,一个包含额外元素仅用于组合框,另一个用于所有其他目的
  • 当然,只要你的 myCollection 是可序列化的。将该属性仅用于绑定,并在您绑定到组合的 SelectedItem 的属性的设置器中选择额外项目时执行您想做的任何事情。需要明确的是:您可能想要序列化 ​​myCollection,而不是属性 MyCollectionViewProp。
【解决方案2】:

最简单的方法是在可观察集合中添加一个带有一些前缀文本/键的额外项目。 这样,因为它在集合中,所以它将在组合框中可见,并且当用户选择此项目时,您可以评估它以查看它是否是添加的项目。

确实给出了一个很好的例子作为这个问题的答案add an item to combobox before bind data from data base

【讨论】:

  • 这是最简单的方法并且工作正常。但是由于我必须对 observable 集合进行其他操作,所以我宁愿不必更改它,因为它需要在任何地方处理额外的值(“ALL BLADES”)
  • 好吧,因为您直接将集合设置为其来源,所以没有其他真正的方法。将集合分配给组合框后,您可以尝试将项目添加到组合框的项目源中。
猜你喜欢
  • 2013-04-18
  • 2016-09-25
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多