Windowsストアアプリを構築していて、TextBoxをTaskItemオブジェクトの文字列「title」プロパティにバインド(双方向モード)しています。
UIの変更がこのTextBoxに加えられ、ソースに伝播された後、いくつかの処理を行う必要があります。
ターゲット(TextBoxのTextプロパティ)がいつ変更されたかを検出する方法があるかどうか知りたいのですが。TextBoxのLostFocusイベントを処理することでこのイベントをキャッチできることはわかっていますが、このイベントはソースが更新される前にトリガーされます。
アップデート:
バインディング:
<ScrollViewer
x:Name="itemDetail"
DataContext="{Binding SelectedItem, ElementName=itemListView}">
<TextBox x:Name="itemTitle" Text="{Binding Title, Mode=TwoWay}"/>
</ScrollViewer>
クラスとプロパティ:
class TaskItem
{
public string Title { get; set; }
}
ソースからターゲットに変更を伝播する必要がないため、INotifyPropertyChangedを実装しませんでした。
私は2つの解決策を考えることができます:
- プロパティのセッターで[CallerMemberName]を使用する方法はありますか?ある場合は、「タイトル」が自分のコードによって変更されたのか、バインディングが原因で変更されたのかを判断できる場合があります。
- LostFocusイベント中に双方向バインディングを破棄し、ソースを手動で更新します。