現時点では、INotifyPropertyChangedを実装する独自の辞書を作成しています。下記参照:
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
new public Item this[TKey key]
{
get { return base.Item[key]; }
set(TValue value)
{
if (base.Item[key] != value)
{
base.Item[key] = value;
OnPropertyChanged("XXX"); // what string should I use?
}
}
}
私の目標は単純です。Dictionary 内の特定の値が変更されたときに、変更されたことを通知することです。対応するキー名とのバインディングを持つすべての WPF 要素は、それ自体を更新する必要があります。
私の質問は次のとおりpropertyName
です。通知するには、どの文字列を使用すればよいですか?
私は試してみまし"[" + key.ToString() + "]"
たが、"Item[" + key.ToString() + "]"
単純key.ToString()
です。WPF 要素が更新されなかったため、すべてが機能していないように見えました。
String.Empty
( )を使用""
すると WPF 要素が更新されますが、これは使用しません。キーが異なっていても、同じ辞書にバインドされているすべての WPF 要素が更新されるためです。
これは私のバインディングが XAML でどのように見えるかです:
<TextBlock DataContext="{Binding Dictionary}" Text="{Binding [Index]}" />
Index
もちろん、私の辞書のキーの名前です。
INotifyPropertyChanged を使用する代わりに、INotifyCollectionChangedを使用することを提案する人もいます。私はこれを試しました:
Dim index As Integer = MyBase.Keys.ToList().IndexOf(key)
Dim changedItem As Object = MyBase.ToList().ElementAt(index)
RaiseEvent CollectionChanged(Me, New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, changedItem, index))
ただし、バインドされた WPF 要素も更新されません。