5

textbox.textchanged イベントに問題があります。私のテキストボックスはデータバインドされており、ページが読み込まれると、textchanged イベントがトリガーされます。それが起こらないようにするにはどうすればよいですか?ユーザーが何らかの変更を加えたときにのみトリガーされますか?

4

4 に答える 4

11

textchanged イベント ハンドラー内で、ウィンドウ (またはユーザー コントロールなど) が読み込まれているかどうかを確認できます。

if (this.IsLoaded)
{
   //your logic here
}

このようにして、ウィンドウがまだロードされていないときに、TextChanged イベントの最初の発生をスキップできます。

于 2011-11-02T06:47:21.637 に答える
3

問題は、テキストが設定されるたびに TextChanged がトリガーされることです。それがまさにWPFの仕組みです。Window/Usercontrol の Loaded イベントをサブスクライブすることにより、codebehind でイベントを設定することにより、これを「修正」できます。Loaded イベントは、すべての子とその子が読み込みを完了し、表示する準備ができた後に発生します。

<UserControl ---- Loaded="UserControl_Loaded">    
-
public void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    _txtBox.TextChanged += txt_changed;
}

public void txt_changed(object sender, RoutedEventArgs e)
{
   (...)
}
于 2011-11-02T08:23:32.137 に答える
1

さて、あなたのコメントから、ユーザーが明示的にフォームを保存または閉じるときに、基になるデータにのみ反映される変更をユーザーに加えてもらいたいと思います。

ここでUpdateSourceTrigger "Explicit"を使用できます。

<TextBox Text={Binding MyData, UpdateSourceTrigger=Explicit}/>

したがって、変更は、ユーザーが保存ボタンを押したときにバインドで UpdateSource を明示的に呼び出すことによってのみ伝達されます。

MVVM を使用する場合は、同じロジックをコードごとに ViewModel に実装することもできます。

于 2011-11-02T06:44:19.083 に答える