【问题标题】:Silverlight Application UI updatingSilverlight 应用程序 UI 更新
【发布时间】:2012-07-22 00:15:15
【问题描述】:

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

所以我想做这样的事情

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

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

【问题讨论】:

    标签: c# wpf silverlight oop asynchronous


    【解决方案1】:

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

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

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

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

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

    但请不要随便乱搞,以后会给你带来更大的痛苦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2012-06-26
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多