Silverlight 4中的组合框

时间:2011-07-14 19:08:24

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

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

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刷新自己的任何想法?或者只是解决问题?我知道这是一个非常小的问题,但它足以迫使我重写相当多的代码.... :( :( :(

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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