2009-09-22 3 views
0

Silverlight에서 Keyed Observable 컬렉션을 구현하고 Name이라는 속성에 따라 고유 한 개체를 저장하려고합니다. 그것을 수행하는 한 가지 방법은 포함 된 elemens의 모든 PropertyChanged 이벤트를 구독하고 name 속성이 변경되는지 확인하기 위해 ObservableCollectionEx (다른 stackoverflow 게시물의 샘플) 클래스를 사용하는 것입니다. 더 좋은 점은 item 속성이 변경되었음을 알리는 항목을 작성하고 항목이 이미있는 경우 ValidationException을 던지는 것입니다. 반드시 [이름] 인덱서를 사용하여 개체를 검색하고 싶지는 않습니다. 이 같은Silverlight에서 ObservableCollection 키 지정

뭔가를해야만 :

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

    } 
} 

다른 솔루션은 더 우아한 있습니까? 훨씬 간단 해? 감사합니다. 애드리안

P.S. Dr. Wpf가 조립 한 ObservableDictionary도 있고 Silvelight로 옮기기가 쉽지만 DataForm과 함께 사용하는 방법을 모르겠습니다. 내가 제대로 이해하고있는 경우

답변

1

ObservableDictionary(Of TKey, TValue)와 그 - VB.NET

일반 기능 목록 :

  • ObservableDictionary (Of TKey, TValue)
  • AddRange는 한 번만 알림을받습니다.
  • 일반 이벤트Args (Of TKey, TValue)
  • NotifyDictionaryChanging (Of ​​TKey, TValue) - 취소 작업을 허용하는 CancelEventArgs의 하위 클래스입니다.
+1

INotifyCollectionChanged를 구현하지 않는 점을 제외하고는. 바인딩에 필요한 것 같습니다. –

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에 대해 동일한 값을 가진 두 개의 객체를 추가하는 것을 방지 할 수 있도록하는 것입니다. 또는 최소한 사용자가 Name 속성의 변경 사항을 유지할 수있게하기 전에 대응할 수 있어야합니다. 기본 키 (해당 키의 고유 키)를 기반으로하는 데이터 테이블에서와 매우 비슷합니다. –