0

文字列依存関係プロパティを TextBox の Text に双方向バインディングしています。

バインディングは次のようになります。

Text="{Binding MyValue, Mode=TwoWay}"

を設定する OnKeyUp (添付プロパティ) で起動するコードがいくつかありますMyValue。しかし、私の値を取得して Text プロパティに適用するのではなく、逆の方向に進んでいます。

イベントのシーケンスは次のとおりです。

  1. ユーザーは次のようなテキスト文字列を入力します: 0299900650
  2. ユーザーが Enter キーを押します。
  3. キーアップで、MyValue を 2999 に設定し、次のフィールドにフォーカスを移動します。
  4. MyValue のセッターが起動し、2999 で NotifiyPropertyChanged を実行します
  5. LostFocus が起動します。
  6. MyValue のセッターが起動し、0299900650 で NotifiyPropertyChanged を実行します。

私の価値はどういうわけか「TextBox.Text」に戻っていないようです。フォーカスを失うと、TextBox は文字列の値を Text プロパティの内容で更新しています (変更が戻されなかったため、値は変更されていません)。

ここで気付いていない WPF マジックはありますか?

注: バインディングを再確認しました。(加えて、それらは UI から動作するので、UI に行くのは正しいと思います。)

注 II: 「ユーザーが文字列を入力する」と言うとき、それは実際にはスキャンされたバーコードです。しかし、私はキーボード ウェッジを使用しているので、入力されたかのように表示されます。

更新: これは、別のプロパティに副作用があることが原因であることがわかりました。問題を解決できました。

4

2 に答える 2

2

WPFバインディングメッセージングでの同時実行の競合に飛び込むだけです。それを証明するには、次のようにします。

  • OnKeyUp偶数ハンドラーを削除します

そしてあなたがしたのと同じことをしなさい。クリックEnterすると、バインディングメカニズムが起動し、コードビハインドプロパティが設定されます。

KeyUpで作成する場合、新しい値2999は後のバインディングによって抑制されます。

これを正しく管理するには、ConverterOnKeyDownを利用して、サブスクリプションさえも取り除きます。

于 2012-05-07T20:48:37.417 に答える
0

これは、別のプロパティに副作用があるためであることがわかりました。その副作用を修正することで、問題を修正することができました。

于 2012-05-07T21:01:29.140 に答える