Keyed ObservableCollection в Silverlight - PullRequest
       15

Keyed ObservableCollection в Silverlight

0 голосов
/ 22 сентября 2009

Я хочу реализовать наблюдаемую коллекцию с ключами в Silverlight, которая будет хранить уникальные объекты на основе свойства Name. Один из способов сделать это - использовать класс ObservableCollectionEx (примеры из другого поста stackoverflow), который подписывается на все события PropertyChanged на содержащихся элементах и ​​проверяет, изменяется ли свойство name. Еще лучше, создайте мое собственное событие, которое сообщит мне об изменении атрибута имени, и выдаст исключение ValidationException, если элемент уже существует. Я не обязательно хочу получить объект с индексатором this [Name].

что-то вроде этого:

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

   }
}  

Есть ли другое решение, более элегантное? Намного проще? Спасибо, Адриан

P.S. Я знаю, что есть также ObservableDictionary, который доктор Wpf собрал, и его легко переместить в Silvelight, но я не знаю, как использовать его с DataForm и тому подобным.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2009

Если я правильно понимаю, вам нужно создать 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 голос
/ 19 ноября 2009

ObservableDictionary (Of TKey, TValue) - VB.NET

Список общих функций:

  • ObservableDictionary (Of TKey, TValue)
  • AddRange получает уведомление только один раз.
  • Общие EventArgs (Of TKey, TValue)
  • NotifyDictionaryChanging (Of ​​TKey, TValue) - подкласс класса CancelEventArgs, который позволяет отменять операцию.
...