Silverlight中的Keyed ObservableCollection

时间:2009-09-22 02:50:28

标签: silverlight observablecollection keyedcollection

我想在Silverlight中实现一个键控的可观察集合,它将根据名为Name的属性存储唯一对象。一种方法是使用ObservableCollectionEx(另一个stackoverflow post中的样本)类,该类订阅包含的elemens上的所有PropertyChanged事件,并检查name属性是否更改。更好的是,创建我自己的事件,告诉我name属性已更改,如果item已存在则抛出ValidationException。我不一定想用索引器[Name]来检索对象。

这样的事情:

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

   }
}  

还有其他解决方案更优雅吗?更简单? 谢谢, 阿德里安

P.S。我知道还有一个ObpableDictionary,Wpf博士放在一起,很容易将它移到Silvelight,但我不知道如何将它与DataForm等一起使用。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

ObservableDictionary(Of TKey, TValue) - VB.NET

一般功能列表:

  • ObservableDictionary(Of TKey,TValue)
  • AddRange只收到一次通知。
  • Generic EventArgs(Of TKey,TValue)
  • NotifyDictionaryChanging(Of TKey,TValue) - CancelEventArgs的一个子类,允许取消操作。