【问题标题】:Silverlight - loading a form best practicesSilverlight - 加载表单最佳实践
【发布时间】:2011-08-04 20:26:21
【问题描述】:

我有一个在 asp.net 中创建的简单仪表板,我正在尝试将其转换为 Silverlight。我面临的问题是 WCF 服务异步运行,并且某些控件依赖于其他控件。

理想情况下我想:

  1. 加载页面中的数据。 4 WCF 服务
  2. 设置用户控件的 Datacontext
  3. 加载用户控件依赖的表单数据
  4. 设置默认控件数据
  5. 根据默认值在用户控件中运行报表

1&2) 我有大约 4 个对象在每个控件需要的页面中异步加载。加载这些后,我在每个对象上设置 DataContext。我对我的解决方案并不疯狂。我所做的是为已完成事件中加载的每个对象设置一个布尔值,当它们全部加载时,然后设置 DataContext。我传递的对象具有所有 4 个对象的属性
3) 我正在考虑在每个用户控件类上都有一个公共方法 (LoadFormData),当我设置数据上下文时,我可以从页面执行该方法
5) 在 1 和 2 中执行相同操作,其中我为用户控件中加载的每条数据都有一个布尔值,当它们全部加载时,我可以运行报告。

基本上,我想知道一种更好/更优雅的方法。

页面
|__ 用户控制 1
|__ 用户控制 2
|__ 用户控制 3
|__ 用户控制 4
|__ 用户控制 5

【问题讨论】:

  • 这些是单独的 Silverlight 控件还是页面上的一个?

标签: c# silverlight wcf


【解决方案1】:

我刚刚发现this blog post 让两个 Silverlight 控件进行通信。这个例子看起来很啰嗦,但它基本上是使用 JavaScript 来进行通信的。

在控件 A 中,您调用一段 JavaScript(来自他的示例):

HtmlPage.Window.Invoke("changeColor", clicky.Name);

然后在页面的 JavaScript 中调用 Control B 中的方法:

function changeColor(color) {
        slObject = document.getElementById("ControlB");
        slObject.Content.Page.ChangeBackgroundColor(color);
}

这是一个简单的示例,但在您的情况下,您需要在控件 A 准备好后对其进行 JavaScript 调用。然后,这可以调用您的其他控件,这将允许他们做他们的事情。

【讨论】:

  • 上面的页面代表一个 Silverlight 页面/用户控件。
猜你喜欢
  • 2012-08-19
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2010-10-03
  • 2011-04-26
  • 2012-07-19
相关资源
最近更新 更多