使用wcf ria服务从数据库向银灯控件添加内容

时间:2011-02-15 05:53:29

标签: xaml silverlight-4.0 wcf-ria-services

我正在尝试从数据库中检索字符串,并在加载之前将其作为内容添加到我页面上的控件(有点像自定义本地化)。我从数据库uing ria服务中检索我的字符串,如下所示:

**

 Web.DomainService1 context = new Web.DomainService1();

LoadOperation<Web.LocalizationTab>LoadOp=context.Load(context.GetLocalizationTabsQuery(currentCulture, moduleName));

 Dictionary<string, string> localizationDictonary = new Dictionary<string, string>();

        List<Web.LocalizationTab> localList = new List<Web.LocalizationTab>();

        LoadOp.Completed += (s, e) =>
        {
            localList = LoadOp.Entities.ToList<Web.LocalizationTab>();

            //System.Windows.MessageBox.Show(localList.Count.ToString());
            foreach (Web.LocalizationTab item in localList)
            {
                // var control = this.FindName(item.Control_ID.ToString());
                if (!localizationDictonary.ContainsKey(item.Control_ID))
                {
                    localizationDictonary.Add(item.Control_ID, item.Control_Text);
                }
            }

        };** 

这段代码位于一个名为utilities.cs的独立类中。 现在在我的Mainpage.xaml.cs中我需要获取带有值的字典,然后使用字典中的字符串设置控件。 我的问题是,当我在Mainpage.xaml.cs的构造函数中执行以下操作时:

utilities.getDict(ModuleName);

button1.Content = localizationDictonary["button1"].ToString();

我得到一个异常,因为字典在那个时间点不包含值。只有在我的构造函数退出后才会触发从数据库获取数据的加载完成事件。现在我如何在这个特定场景中自动设置我的控件?

2 个答案:

答案 0 :(得分:1)

尝试在Silverlight应用程序类StartUp event中加载字典。这应该确保您的Dictionary被加载(并且可以放在应用程序资源中以便在应用程序的其他地方进行检索)。

答案 1 :(得分:0)

在实例化MainPage之前,您需要等待GetLocalizationTabsQuery完成。在App.xaml.cs文件中,您可以启动查询,添加查询完成处理程序,并仅在调用查询完成处理程序时创建MainPage。