私は本当に、そのユーザーがキー、クリップボード、マウス、クリップボード、ユーザーによってトリガ何 を使用するかどうか は火だろうTextChangedByUserのようなイベントのいくつかの種類が大好きです。
ユーザーの変更とデータバインディングの変更を区別する方法がわかりません。
は
ではなくBinding.SourceUpdated
イベントを使用し、ユーザ入力を検出するText.TextChanged
イベントを使用しないでください。
以上一般: ビジュアルエレメントのDPを使用してユーザーの更新を検出しないでください。代わりにイベントを使用してください。
これはRoutedEventです。 バインド時にNotifyOnSourceUpdated = true
を設定する必要があります。 UpdateSourceTrigger
の助けを借りて、通知を受けたいときにも微調整することができます。
あなたのXAMLは、このようなSTHのようになります。
<Grid x:Name="LayoutRoot" Binding.SourceUpdated="LayoutRoot_SourceUpdated">
...
<TextBox>
<TextBox.Text>
<Binding NotifyOnSourceUpdated="True" Path="path" UpdateSourceTrigger="PropertyChanged" >
</Binding>
</TextBox.Text>
</Grid>
あなたのイベントは、このようなことができます:
private void LayoutRoot_SourceUpdated(object sender, DataTransferEventArgs e)
{
// called every time s.th. changed by user
}
(によるコメントに編集した)
なぜこれがへの有効な方法です。入力がユーザによって何らかの形でトリガされたかどうかを検出しますか?
TextBoxのDataContextの 'path'プロパティはソースで、 'TextBox.Text'プロパティはのターゲットです。
[データバインディングの概要] http://msdn.microsoft.com/en-us/library/ms752347.aspx
バインディングが初期化され、ソース値が 'TextBox.Text'プロパティに書き込まれるときにTextBox.Textプロパティが初めて変更されます。バインドがいつ正確に行われるかわからないので、TextBox.Textプロパティまたはそのイベント(TextChangedなど)を使用してユーザー入力を検出することはできません。したがって: ユーザー入力を検出するのにText.TextChanged
イベントを使用しないでください。より一般的な:ビジュアル要素のDPを使用してユーザーの更新を検出しないでください!何を意味し、一度「TextBox.Text」プロパティの変更(ごターゲット)その.After、バインディングアップデートソースがで定義されたことにより、ユーザーが視覚的テキストフィールドの内容を変更した場合
UpdateSourceTrigger
。SourceUpdatedイベントが発生したときです。
私は、バインディングの外部からのバインディングソースの変更の影響を知りません。 しかし、私は完全なエディタのようなデスクトップ - アプリケーションがその方法でユーザーの変更を検出し、それは非常にうまく動作しています。
はい、私はこれを既に見つけましたが、実際に私が直接望んでいたものではありません。私はバインディングオブジェクトのTargetUpdatedイベントのイベントハンドラを追加しています。私のカスタムコントロール内で処理されるこのイベントでは、ユーザーがフィールドを変更したかどうかを追跡するために使用するフラグをリセットします。私が本当に好きなのは、バインディングイベントであるかどうかを示す静的プロパティを照会することができるイベントハンドラ内です。 – happyfirst
あなたは本当に間違った方法でこれを見ています。私が提案したやり方で、TargetUpdatedからSourceUpdatedへの再設計を考えるべきです。それはまさにあなたが探しているものであることに気付くでしょう。 "私が本当に好きなのは、バインディングイベントであるかどうかを知らせる静的プロパティを照会することができるイベントハンドラ内です" –
何を取得しているのかを確認します。私は技術的に推測すると、sourceupdatedは常に最初に発射され、次にターゲットが更新されますか?私はあなたのコメントのために投稿を編集しました。SourceUpdated – happyfirst