0

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

像这样的东西:

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

   }
}  

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

PS我知道Wpf博士还整理了一个ObservableDictionary,很容易将其移至Silvelight,但我不知道如何将它与DataForm等一起使用。

4

2 回答 2

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
}
于 2009-09-23T16:46:05.220 回答
1

ObservableDictionary(Of TKey, TValue) - VB.NET

一般功能列表:

  • ObservableDictionary(TKey, TValue)
  • AddRange 只收到一次通知。
  • 通用 EventArgs(TKey, TValue)
  • NotifyDictionaryChanging(Of TKey, TValue) - CancelEventArgs 的子类,允许取消操作。
于 2009-11-19T14:44:49.610 回答