Silverlight - 加载表单最佳实践

时间:2011-08-03 15:37:01

标签: c# silverlight wcf

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

理想情况下我想:

  1. 在页面中加载数据。 4 WCF服务
  2. 设置用户控件的Datacontext
  3. 加载用户控件依赖表单数据
  4. 设置默认控制数据
  5. 根据默认值在用户控件中运行报告
  6. 1& 2)我有大约4个对象在页面中异步加载,每个控件都需要。当加载它们时,我在每个对象上设置DataContext。我并不为我的解决方案而疯狂。我所做的是为已完成事件中加载的每个对象设置一个bool,当它们全部加载时,然后设置DataContext。我传递的对象具有所有4个对象的属性
    3)我正在考虑在每个用户控件类上有一个公共方法(LoadFormData),当我设置datacontext时,我可以从Page执行该方法 5)在1和1中做同样的事情。 2,我在用户控件中加载的每一段数据都有一个bool,当它们全部加载时我可以运行报告。

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


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

1 个答案:

答案 0 :(得分:1)

我刚刚发现this blog post有关获取两个Silverlight控件进行通信的问题。该示例看起来很长,但它基本上使用JavaScript来进行通信。

在Control A中,你调用了一段JavaScript(来自他的例子):

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

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

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

这是一个简单的例子,但在你的情况下,你需要在它准备就绪时在Control A中进行JavaScript调用。然后,这可以调用您的其他控件,这将允许他们完成他们的工作。