Ho una pagina Silverlight che riceve i dati da una classe del modello di vista che aggrega alcuni dati da vari servizi di dominio (servizi RIA).Come utilizzare DomainContext.Load per popolare le proprietà del mio ViewModel?
Idealmente mi piacerebbe che la pagina fosse in grado di associare i suoi dati ai controlli delle proprietà dell'oggetto modello di visualizzazione, ma poiché DomainContext.Load
esegue una query in modo asincrono, i dati non sono disponibili al caricamento della pagina.
mia pagina di Silverlight ha il seguente 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>
mio ViewModel si presenta così:
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");
}
}
}
Penso che questo approccio deve essere fondamentalmente sbagliato perché la natura asincrona di Load
significa che il widget la lista non è necessariamente popolata quando i dati ListBox si legano. (Un punto di interruzione nel mio repository mostra che il codice da popolare alla raccolta è in esecuzione, ma solo dopo il rendering della pagina.)
Qualcuno può indicarmi il modo giusto per farlo?