1

我认为这是新手常见且典型的问题,但我仍然不完全理解给定的解决方案。我正在编写一个 Windows Phone 7 应用程序,我想执行几个HttpWebRequest提交 POST 数据并设置一些标题的地方。响应应该被反序列化,然后由逻辑和/或 UI 层处理。

是的,Silverlight 应用程序以异步方式进行 Web 通信。我明白了。它工作正常。

但是:我想将通信处理与 UI 分离。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方法。或者也许我需要使用 lambdas?

我的通信层中有一个SendBasicRequest方法,它设置适当的标头(例如 ClientOS、LoginKey、VersionBuild 等)。我想从多个页面调用此方法,因此我希望它在通信层中解耦。

提前致谢

4

2 回答 2

1

使用 MVVM 轻量级工具包。这是将 UI 与后端代码分离的最简单方法。

您可以在 CodePlex 网站上找到 MVVM Light。

于 2012-10-01T16:28:20.923 回答
0

MVVM Light Toolkit 提供了一个可靠的框架,可以轻松地将 MVVM 用于 WP7 应用程序。

但请注意,需要一些预读才能完全理解 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 和异步

我希望这些信息可以帮助你。MVVM 对我来说并不简单,尤其是因为我不太喜欢 .NET 和 DataBinding。所以一开始的曲线非常陡峭。但是一旦你理解了这些原则,它真的会让你的生活更轻松;)

于 2012-10-24T16:31:15.720 回答