1

これは初心者からのよくある典型的な質問だと思いますが、与えられた解決策をまだ完全には理解していません。HttpWebRequestWindows Phone 7 アプリケーションを作成していますが、POST データを送信していくつかのヘッダーを設定する場所をいくつか実行したいと考えています。レスポンスはデシリアライズしてから、ロジックや UI レイヤーで処理する必要があります。

はい。Silverlight アプリの場合、Web 通信は非同期で行われます。了解。それは正常に動作します。

BUT: UI resp から通信処理を分離したい。xaml.cs コード。HttpWebRequestヘッダーなどを変更する必要があるため、との通信を行う必要があります。

私がやりたいことは次のとおりです。

  1. ボタンをクリックします。ログイン/ユーザー名は、私の通信層としましょう。例えば:LoginRequest(string username, string pwd)
  2. 通信。層は要求を実行し、応答を非同期的に取得します。つまり、コールバックを呼び出します。LoginResponseCallback(IAsyncResult res)
  3. これで、応答を処理し、取得した JSON 文字列をオブジェクトに逆シリアル化できます
  4. データを更新するには、オブジェクトを UI に戻す必要があります。Dispatcher.BeginInvokeコールバックが UI スレッドで実行されていないため、メソッドを使用する必要があることはわかっています。

しかし、オブジェクトを通信レイヤーから UI に渡す方法がまだわかりません。btnLogin_onClick(object sender, RoutedEventArgs e)からLoginRequestメソッドにデリゲートを渡すなど、ソリューションは非常に簡単だと思います。それとも、ラムダで作業する必要がありますか?

適切なヘッダー (例: ClientOS、LoginKey、VersionBuild など) を設定するSendBasicRequestメソッドが通信レイヤーにあり、複数のページからこのメソッドを呼び出したいので、通信レイヤーで分離する必要があります。

前もって感謝します

4

2 に答える 2

1

MVVM ライト ツールキットを使用します。これは、UI をバックエンド コードから分離する最も簡単な方法です。

MVVM Light は CodePlex サイトにあります。

于 2012-10-01T16:28:20.923 に答える
0

MVVM Light Toolkit は、WP7 アプリで MVVM を簡単に使用するための強固なフレームワークを提供します。

ただし、MVVM パターンの原理と MVVM に基づくフレームワークを完全に理解するには、事前にある程度の知識が必要になることに注意してください。

複雑さをガイドするいくつかの有用な情報。コマンドを使用して、XAML とコード ビハインド ファイルから多くのロジックを分離するのに役立ちました。ViewModels を使用してロジックを処理し、Async CTP (VS2012 で完全に利用可能) と簡単に非同期でタスクを実行することもできます。

Model-View-ViewModel デザイン パターンを使用した WPF アプリは、MVVM と DataBinding の理解に役立ちます

Silverlight アプリケーションでの MVVM パターンの概要では、IoC を使用して、データを非同期でフェッチする中間サービス エージェントを挿入します。

Windows Phone Mango: 10 分で MVVM を使い始めるMVVM とコマンドの使用方法がわかりやすくてわかりやすい

MVVM (Apex フレームワーク) のコマンドは、非同期コマンドなどを備えています。

非同期/待機

バックグラウンドで非同期操作を実行し、タスクが完了したときに通知を受け取るのに役立ちます。async/await キーワードを使用します (VS2012 または Async CTP の新機能)。

Async と Await を使用した非同期プログラミング (C# および Visual Basic)

Async CTP – Windows Phone 向けのタスク ベースの非同期プログラミング

MVVMLight と非同期

この情報がお役に立てば幸いです。特に私は .NET と DataBinding にあまり興味がなかったので、MVVM は私にとって単純ではありませんでした。そのため、最初のカーブは非常に急でした。しかし、一度原理を理解すれば、あなたの人生は本当に楽になります ;)

于 2012-10-24T16:31:15.720 に答える