WPFのバインディング式でコンバーターを使用すると、データが更新されても値が更新されないのはなぜですか。
単純なPersonデータモデルがあります。
class Person : INotifyPropertyChanged
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
私のバインディング式は次のようになります。
<TextBlock Text="{Binding Converter={StaticResource personNameConverter}" />
私のコンバーターは次のようになります。
class PersonNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Person p = value as Person;
return p.FirstName + " " + p.LastName;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
コンバーターなしでデータをバインドすると、うまく機能します。
<TextBlock Text="{Binding Path=FirstName}" />
<TextBlock Text="{Binding Path=LastName}" />
私は何が欠けていますか?
編集:いくつかのことを明確にするために、実装する必要のあるINotifyPropertyChangedインターフェイスに関してJoelとAlanの両方が正しいです。実際には実際に実装していますが、それでも機能しません。
ウィンドウタイトルをフルネームにバインドしようとしていて、ウィンドウタイトルがテンプレートを受け取らないため、複数のTextBlock要素を使用できません。
最後に、複合プロパティ "FullName"を追加してバインドするオプションがありますが、バインドでコンバーターを使用すると更新が行われないのはなぜか疑問に思っています。コンバーターコードにブレークポイントを設定しても、基になるデータが更新されたときにデバッガーがそこに到達しません:-(
ありがとう、ウリ