一見無関係な問題を調査しているときに、予期しない拘束力のある動作に遭遇しました。持っている
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がコレクションアイテムの1つに明白な方法でバインドされると
<TextBox Text="{Binding Params[APN_HOST].Value}" />
StringRecordのインスタンスのPropertyChangedイベントは、テキストの編集時に発生しません。しかし、それを次のように書き直します
<TextBox DataContext="{Binding Params[APN_HOST]}" Text="{Binding Value}" />
奇跡を起こし、イベントは正しく発火し始めます。
なんで?