0

こんにちは、Windows Phone Silverlight C#アプリケーションで作業しているときに問題が発生しました。

だから私はこのようなことをしたい

  1. 1ページ目のボタンを押します。ボタンクリックハンドラーは、MakeRequest他のクラスの非同期メソッドを呼び出してデータを取得します。asyncメソッドはイベントを発生させDataReadyEvent、結果を次のようにラップしDataEventArgsます。このイベントのハンドラーはPage2にあります。したがって、このイベントにハンドラーを追加した後、現在のページからPage2に移動します。
  2. コードビハインドのイベントハンドラーでデータを取得し、UIで更新したいと思います。ただし、イベントハンドラーは静的です(そのためPage2.handler_method_name、ページの新しいインスタンスを作成せずに、page1コードで使用してイベントハンドラーを追加できます)。ハンドラーメソッドは静的であるため、Dispatcher.Invokeを使用してUIスレッドに戻り、UIを更新することはできません。

それで、この場合、誰かがそれについて何か考えを持っていますか?page1でasyncメソッドを呼び出し、page2で結果をUIに更新したいだけです。ありがとうございました

4

1 に答える 1

1

ここにアイデアがあります:それを静的にしないでください。カプセル化などの単純なOOPルールを破ったり、使用しているフレームワークの周りにいくつかのクレイジーな回避策を見つけたりして、自分で問題を作成しようとしないでください。

そのような状況にあるときは、立ち止まって、振り返って考えてください。それは、あなたが完全に間違ったことをしていることを示しているからです。ハックや回避策を見つけて、それをさらに推し進めようとしないでください。むしろ、正しいパラダイムをリファクタリングして再利用する必要があります。

たとえば、Page2に結果を表示したい場合は、Page2がすでにあります。したがって、そのインスタンスがあります。では、なぜ静的ハンドラーを使用したいのですか?おそらく、このページへの参照がないためです。それは問題ありませんが、通常はすべきではありません。

ただし、計算が終了したら、「ねえ、これでタスクが完了しました」というイベントを公開できます。その時点で、誰がこの結果に興味を持っているかを気にする必要はありません。それは労働者の関心事ではありません。つまり、計算自体のロジックはおそらくPage1から移動する必要があります。実際、ページの問題はドームプレゼンテーションロジックであり、それ以上のものではありません。Page1は、何らかの計算を行う必要があることを要求する必要があります。そして、これを実際に実現するための外部コンポーネント(おそらくViewModel内の何か)があります。

したがって、結果を消費する準備ができたら、それをViewModelにプッシュする(いくつかの監視可能なプロパティやコレクションなどを更新する)ことができます。したがって、このデータに関心のあるUI(またはそれらの多くまたは他のコンポーネント)がある場合は、自動的に通知され、データが表示されます。

しかし、ハッキングしようとしないでください。将来、より大きな苦痛につながるでしょう。

于 2012-07-22T01:52:11.443 に答える