2011-07-14 107 views
0

我有一個組合框綁定到基本上是名稱/值對列表的集合。該集合可以包含具有不同名稱的多個項目,但值可能相同。Silverlight中的組合框4

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

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

所以我的用戶控制裏面我有一個名爲項的私有字段,它是的NameValuePair集合的實例:

private NameValuePairCollection items = new NameValuePairCollection()

某處沿着該集合被初始化和項目將加入到線它。但是,我看到的問題是,當我嘗試設置綁定到該集合組合框的選定索引:

this.CboItemsSelector.SelectedIndex = 3;

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

選中的項目有但用戶界面不同步。 UI的選擇器仍默認爲列表中的第一個項目,即使SelectedItem的Name和Value屬性在底層集合的索引3中的任何內容都可以執行!

有關如何強制ComboBox自行刷新的任何想法?或者只是簡單地解決這個問題?我知道這是相當小的問題,但它足夠大,迫使我重寫相當多的代碼.... :(:(:(

謝謝!

+0

你能發佈你的綁定代碼嗎?你有Mode = TwoWay嗎? –

回答

1

你需要從繼承的ObservableCollection,不List。否則沒有OnPropertyChanged事件將被觸發,並且綁定控件不會知道數據已被更新。

+0

正確。不知道爲什麼它有所作爲b/n'ObservableCollection '和'List '但由於某種原因,當使用列表我可以設置選定的項目或選定的索引和組合框的ui不會更新。奇怪的部分是,如果我檢查組合框的SelectedItem或Selected索引,它將顯示我剛剛設置的值,儘管UI未刷新。我不知道爲什麼使用'ObservableCollection '有所作爲,因爲設置SelectedItem或SelectedIndex操作組合框而不是集合。該集合不會更改任何事件。 – bleepzter

1

所選項目的名稱和值屬性是否匹配或是SelectedItem是否來自同一個集合中的實例?知道比較項目的名稱和價值,除非你告訴它,否則它會使用對象相等來嘗試找到你的列表中的項目。如果你將選定的項目設置爲一個實際不在李的實例st(但具有相同的屬性).net將不會在列表中找到它。您有2個選項,覆蓋對象的相等性並強制進行屬性比較,或者確保始終將所選項目設置爲列表中的項目。還可以嘗試一下安迪·梅建議的,並在ItemsSource和SelectedItem上執行2種方式的綁定,應該可以工作然後