7
我有一个Silverlight页面,从来自不同(RIA服务)汇总了一些数据域业务视图模型类中获取数据。如何使用DomainContext.Load来填充ViewModel的属性?
理想情况下,我希望页面能够将其控件绑定到视图模型对象的属性,但由于DomainContext.Load
异步执行查询,因此数据在页面加载时不可用。
我的Silverlight的网页有以下XAML:
<navigation:Page x:Class="Demo.UI.Pages.WidgetPage"
// the usual xmlns stuff here...
xmlns:local="clr-namespace:Demo.UI.Pages" mc:Ignorable="d"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DataContext="{d:DesignInstance Type=local:WidgetPageModel, IsDesignTimeCreatable=False}"
d:DesignWidth="640" d:DesignHeight="480"
Title="Widget Page">
<Canvas x:Name="LayoutRoot">
<ListBox ItemsSource="{Binding RedWidgets}" Width="150" Height="500" />
</Canvas>
</navigation:Page>
我的视图模型是这样的:
public class WidgetPageModel
{
private WidgetDomainContext WidgetContext { get; set; }
public WidgetPageModel()
{
this.WidgetContext = new WidgetDomainContext();
WidgetContext.Load(WidgetContext.GetAllWidgetsQuery(), false);
}
public IEnumerable<Widget> RedWidgets
{
get
{
return this.WidgetContext.Widgets.Where(w => w.Colour == "Red");
}
}
}
我觉得这个方法一定是根本错误的,因为Load
异步特性意味着小部件ListBox数据绑定时不一定会填充列表。 (在我的仓库的断点显示正在执行填充到采集的代码,但是页面呈现之后。)
可有人请告诉我这样做的正确方法?