0

您好,我在使用 Windows Phone silverlight C# 应用程序时遇到问题。

所以我想做这样的事情

  1. 按第一页上的一个按钮。按钮单击处理程序调用MakeRequest其他类中的异步方法来检索数据。async 方法将触发一个事件DataReadyEvent并将结果包装为DataEventArgs. 该事件的处理程序将在 Page2 中。因此,在向此事件添加处理程序后,我从当前页面导航到 Page2。
  2. 我想通过页面 2 代码后面的事件处理程序检索数据并在 UI 上更新它。但是事件处理程序是静态的(因此我可以通过Page2.handler_method_name在 page1 代码中使用来添加它,而无需创建页面的新实例。)。由于处理程序方法是静态的,因此我无法使用 Dispatcher.Invoke 并返回 UI 线程并更新 UI。

所以在这种情况下,有人知道吗?我只想在 page1 中调用一个异步方法,并将结果更新到 page2 中的 UI。谢谢

4

1 回答 1

1

这是一个想法:不要让它成为静态的。不要试图通过破坏简单的 OOP 规则(如封装等)以及围绕您使用的框架寻找一些疯狂的解决方法来为自己制造问题。

当你处于这种情况时,你应该停下来,回头想想,因为这表明你做错了事。不要试图通过寻找黑客和解决方法来进一步推动它。相反,您应该重构和重用正确的范例。

例如,如果您想在 Page2 上显示结果,则有一个 Page2 ALREADY。所以有一个例子。那你为什么要使用静态处理程序呢?可能是因为您没有对此页面的引用。没关系,通常你不应该。

但是当你完成你的计算时,你可以发布一个事件说“嘿,任务完成了”。那时你不应该关心谁对这个结果感兴趣,那不是工人关心的问题。这意味着计算本身的逻辑可能应该从 Page1 中移出。实际上,页面关注的是圆顶表示逻辑,仅此而已。Page1 应该提出需要进行一些计算的请求。这里将有一个外部组件(可能是您的 ViewModel 中的某些东西)来实际实现它。

因此,当结果准备好被使用时,您可以简单地将其推送到 ViewModel 中(更新一些可观察的属性或集合等),因此如果有任何 UI(或其中许多,或其他组件)对此数据感兴趣,它会自动通知并显示数据。

但请不要乱来,以后会招来更大的痛苦。

于 2012-07-22T01:52:11.443 回答