目前我正在编写实现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
当然是我字典中的键名。
一些人建议使用INotifyCollectionChanged ,而不是使用 INotifyPropertyChanged 。我试过这个:
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 元素。