最初に、以下のサンプルは単純化しすぎていると言いたいです。WPF コントロールをバインドしたとします。
<Window Title="Window1" Height="300" Width="300">
<Grid>
<StackPanel>
<TextBox Text="{Binding Name}" Margin="10"/>
<Button HorizontalAlignment="Center"
Content="Click Me" Margin="5"
Padding="2" Click="OnButtonClick" />
</StackPanel>
</Grid>
</Window>
INotifyPropertyChanged
ウィンドウは、フォームに Name セッターを実装して持つ Person クラスにバインドされます。
public string Name
{
get { return _name; }
set
{
_name = "Some Name";
OnPropertyChanged("Name");
}
}
つまり、ユーザーが UI から変更しようとするたびに、_name に「ある名前」が割り当てられます。しかし、このサンプルは機能しません。TextBox の名前をいくつかの値に変更し、タブを押してフォーカスをボタンに移動させ、TextBox の値は変更されませんが、PropertyChanged イベントがトリガーされました。
なぜそれが起こるのか説明していただけますか?私が理解しているように、PropertyChanged
イベントによりUIはプロパティから値を再読み取りして表示するように強制されますが、私の例では、データバインドされたテキストボックスの値は更新されません。
また。これがプロパティの不適切な実装であることは理解していますが、これは単純化しすぎていることを繰り返したいと思います。これは単なるサンプルです。とにかく、 PropertyChanged は、プロパティが変更されたため更新する必要があることを通知しますが、更新しません。