【问题标题】:Combo Box in Silverlight 4Silverlight 4 中的组合框
【发布时间】:2011-07-14 19:08:24
【问题描述】:

我有一个组合框,它绑定到一个集合,该集合本质上是一个名称/值对列表。集合可以有多个名称不同的项目,但值可能相同。

public class NameValuePair
{
   public string Name { get; set; }
   public string Value { get; set; }
}

public class NameValuePairCollection : List<NameValuePair>
{
   public NameValuePairCollection(): base() { }
}

所以在我的用户控件中,我有一个名为 items 的私有字段,它是该 NameValuePair 集合的一个实例:

private NameValuePairCollection items = new NameValuePairCollection()

在某个地方,集合被初始化并且项目被添加到其中。但是,我看到的问题是当我尝试设置绑定到此集合的组合框的选定索引时:

this.CboItemsSelector.SelectedIndex = 3;

this.CboItemsSelector.SelectedItem = this.items[3];

所选项目存在,但 UI 未同步。 UI 的选择器仍然默认为列表中的第一项,即使 SelectedItem 的 Name 和 Value 属性确实对应于基础集合的索引 3 中的任何内容!

关于如何强制 ComboBox 刷新自己的任何想法?或者只是简单地解决问题?我知道这是一个很小的问题,但它足以迫使我重写相当多的代码...... :( :( :(

谢谢!

【问题讨论】:

  • 您能发布您的绑定代码吗?你有 Mode=TwoWay 吗?

标签: c# silverlight user-interface silverlight-4.0 combobox


【解决方案1】:

你需要从 ObservableCollection 继承,而不是 List。否则不会触发 OnPropertyChanged 事件,并且绑定控件不会知道数据已更新。

【讨论】:

  • 你说得对。不知道为什么 b/n ObservableCollection&lt;T&gt;List&lt;T&gt; 会有所不同,但由于某种原因,在使用列表时,我可以设置所选项目或所选索引,并且组合框的 ui 不会更新。奇怪的是,如果我检查了组合框的 SelectedItem 或 Selected 索引,它会显示我刚刚设置的值,尽管 UI 没有刷新。我不知道为什么使用 ObservableCollection&lt;T&gt; 会有所不同,因为设置 SelectedItem 或 SelectedIndex 会操纵组合框而不是集合。集合不会改变 2 触发任何事件。
【解决方案2】:

选定项的名称和值属性是否匹配,或者选定项是否是同一集合中的实例? .Net 不会知道按名称和值比较项目,除非您告诉它,否则它将使用对象相等来尝试在列表中查找项目。如果您将所选项目设置为实际上不在列表中(但具有相同属性)的实例,.net 将不会在列表中找到它。您有 2 个选项,覆盖对象的相等性并强制比较属性,或者确保始终将所选项目设置为列表中的项目。还可以尝试 Andy May 的建议,并在 ItemsSource 和 SelectedItem 上进行 2 路绑定,然后应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多