C# Silverlight 4中的组合框

C# Silverlight 4中的组合框,c#,silverlight,user-interface,silverlight-4.0,combobox,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 NameValuePairCol

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

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

public class NameValuePairCollection : List<NameValuePair>
{
   public NameValuePairCollection(): base() { }
}
公共类NameValuePair
{
公共字符串名称{get;set;}
公共字符串值{get;set;}
}
公共类名称ValuePairCollection:列表
{
public NameValuePairCollection():base(){}
}
因此,在我的用户控件中有一个名为items的私有字段,它是NameValuePair集合的一个实例:

private NameValuePairCollection items=new NameValuePairCollection()

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

this.CboItemsSelector.SelectedIndex=3

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

所选项目已存在,但UI未同步。UI的选择器仍然默认为列表中的第一项,即使SelectedItem的名称和值属性实际上与基础集合的索引3中的内容相对应

关于如何强制组合框刷新自己有什么想法吗?还是干脆解决问题?我知道这是一个相当小的问题,但它足以迫使我重写相当多的代码(:)(


谢谢!

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

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

是否可以发布绑定代码?Do你有Mode=TwoWay?是的。我不知道为什么它会有不同b/n
observateCollection
List
,但由于某种原因,在使用列表时,我可以设置所选项目或所选索引&组合框的ui不会更新。奇怪的是,如果我选中组合框的SelectedItem或selected index,它就会更新将显示我刚刚设置的值,尽管UI未刷新。我不知道为什么使用
ObservableCollection
会产生不同,因为设置SelectedItem或SelectedIndex会操纵组合框,而不是集合。集合不会改变任何事件。