2016-03-23 16 views
0

ユーザーがTextBoxに何かを入力するまで、自分のコードの実行をブロックする必要があります。"最後の"イベントが発生するのを待つ

しかし、この特定のケースでは、実際に「ユーザーが入力を完了するまで」待つ必要があります。つまり、私は初めてTextChangedイベントが発生するのを待っているのではなく、最後に起動してから500ms以上経過してからメソッドを実行していきます。

現在、TextChangedイベントが発生するたびにタイマーが再起動され、タイマーのTickイベントが発生すると、ユーザーが「入力を完了しました」ということを意味するタイマーが使用されています。

今このアプローチには三つの主要な問題はしかしあります。これまで、この

  • ためTimerを使用してより良い/きれいな方法がなければならない

    • 私は実行をブロックする必要はありませんでしたユーザーが入力を完了するまで、基本的にはコードをTickイベントハンドラに追加していますが、それは変更されません。
    • タイムアウトを設定する必要があります。ユーザーが一定の時間内に入力を完了していない場合は、ユーザーを待たずにメソッドに戻るだけです。

    どのようにすればいいですか?

  • +0

    これは、タイマーをリセットしてx時間後にコードを実行すると、ユーザーが入力を完了したことを示していることがわかります。あるいは、コントロールの「Leave」イベントにコードを入れて、コードを実行するためにコードをタブから外してもかまいませんが、それはユーザーエクスペリエンスではないかもしれません。 –

    答えて

    2

    ReactiveUIを使用すると非常に簡単です。メインページの例を見てください。それは多かれ少なかれあなたが何をしているかを正確にします。

    これは、.NetのReactive Extensions (RX)に基づいており、このようなことを容易にするために書かれています。 ReactiveUIがオプションでない場合は、RXを見て、ReactiveUIがこれをどのように実装しているかを調べることをお勧めします。

    +0

    私の場合、これがどのように機能するかの例を教えてもらえますか?後世のために、彼らのページの例が変わるかもしれません。 – cogumel0

    +0

    良い点。私はここに自分の携帯を持っているので、私の編集オプションは限られています。この例の最後のコードブロックは、変更された値をリッスンし、1秒間待ってからコマンドをトリガーします。ビューモデルの値をTextChangedイベントから簡単に変更して、似たようなことをする必要があります。 –

    +0

    ReactiveUIに依存しない答えも歓迎します。これは私がまだ見ていないもので、これがオプションかどうかはわかりません。 – cogumel0

    関連する問題