2009-09-22 120 views
0

我想在Silverlight中實現一個鍵控可觀察集合,該集合將存儲基於名爲Name的屬性的唯一對象。這樣做的一種方法是使用ObservableCollectionEx(在另一個stackoverflow帖子中的樣本)類,該類訂閱所包含elemens上的所有PropertyChanged事件,並檢查名稱屬性是否更改。更好的是,創建我自己的事件,它會告訴我名稱屬性發生了變化,如果項目已經存在,則拋出一個ValidationException。我不一定要用索引器[Name]來檢索對象。Silverlight中的鍵控ObservableCollection

財產以後這樣的:

private string name; 
public string Name 
{ 
    get { return name; } 
    set { 
     if (value != name) 
     { 
       OnNameChanged(); 
       name = value; 
       OnPropertyChanged("Name"); 
     } 

    } 
} 

是否有其他解決方案更優雅?簡單得多? 謝謝, Adrian

P.S.我知道也有一個ObservableDictionary,Wpf博士放在一起,很容易將它移動到Silvelight,但我不知道如何使用它與DataForm等。

回答

1

ObservableDictionary(Of TKey, TValue) - VB.NET

一般功能列表:

  • ObservableDictionary(TKey,TValue)
  • AddRange只收到一次通知。
  • 通用EventArgs(的TKey,TValue)
  • NotifyDictionaryChanging(的TKey,TValue) - 允許取消操作的CancelEventArgs的子類。
+1

除了它沒有實現INotifyCollectionChanged。似乎有必要進行綁定。 – 2010-11-10 16:14:05

2

如果我理解正確,你需要創建的PropertyChanged實施KeyValuePair,使用與的ObservableCollection

ObservableCollection< KeyValuePair<string,string>> 

public class KeyValuePair<TKey, TValue> : INotifyPropertyChanged 
{ 
    public KeyValuePair(TKey key, TValue value) 
    { 
     _key = key; 
     _value = value; 
    } 

    public TKey Key { get { return _key; } } 

    public TValue Value { get { return _value; } 
     set 
     { 
      _value = value; 
      NotifyPropertyChanged("Value"); 
     } 
    } 


    private TKey _key; 
    private TValue _value; 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 
} 
+0

不,不是真的。我想要的是能夠防止用戶添加具有相同值的屬性名稱的兩個對象。或者至少我應該能夠在允許用戶持續更改Name屬性之前做出反應。 就像在基於主鍵的數據表(這是唯一的關鍵)。 – 2009-09-23 17:57:50

相關問題