在调查一个看似无关的问题时,我遇到了一些意想不到的绑定行为。有
class StringRecord : INotifyPropertyChanged
{
public string Key {get; set; } // real INPC implementation is omitted
public string Value { get; set; } // real INPC implementation is omitted
...
}
class Container
{
public ObservableKeyedCollection<string, StringRecord> Params { get; set; }
...
{
现在,当 TextBox 以明显的方式绑定到集合项之一时
<TextBox Text="{Binding Params[APN_HOST].Value}" />
编辑文本时不会触发 StringRecord 实例的 PropertyChanged 事件。但是,将其重写为
<TextBox DataContext="{Binding Params[APN_HOST]}" Text="{Binding Value}" />
创造奇迹,事件开始正确触发。
为什么?