0

Name というプロパティに基づいて一意のオブジェクトを格納するキー付きの監視可能なコレクションを Silverlight に実装したいと考えています。これを行う 1 つの方法は、含まれている要素のすべての PropertyChanged イベントをサブスクライブする ObservableCollectionEx (別のスタック オーバーフロー ポストのサンプル) クラスを使用し、name プロパティが変更されるかどうかを確認することです。さらに良いことに、name 属性が変更されたことを通知する独自のイベントを作成し、アイテムが既に存在する場合は 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(TKey、TValueの) - VB.NET

一般的な機能のリスト:

  • ObservableDictionary(TKey、TValueの)
  • AddRange は一度だけ通知を受けます。
  • ジェネリック EventArgs(TKey、TValue の)
  • NotifyDictionaryChanging(Of TKey, TValue) - 操作をキャンセルできる CancelEventArgs のサブクラス。
于 2009-11-19T14:44:49.610 に答える