我开发了通用应用,它使用 MVVM Light 和 Navegar 。在此应用中,主页面包含数据透视,其中每个数据透视表都绑定到 ViewModel 。
此页面如下所示:
XAML看起来像这样:
<Page
...>
<Page.DataContext>
<Binding Path="MainViewModelInstance" Source="{StaticResource Locator}"/>
</Page.DataContext>
<Page.Resources>
...
</Page.Resources>
<Grid>
<!-- HOME -->
<Pivot x:Uid="homePivot"
x:Name="homePivot"
CommonNavigationTransitionInfo.IsStaggerElement="True"
TitleTemplate="{StaticResource AppPivotTitle}"
Style="{StaticResource CustomizedPivot}">
<Pivot.Background>
<ImageBrush Stretch="Fill"/>
</Pivot.Background>
<PivotItem x:Uid="homePivotitemHome"
Margin="19,14.5,19,0"
CommonNavigationTransitionInfo.IsStaggerElement="True"
Header="Home">
<PivotItem.Background>
<ImageBrush ImageSource="{Binding Infos.background_image, Converter={StaticResource InfosUIImageFondToStringConverter}}"
Stretch="UniformToFill"
Opacity="0.75"/>
</PivotItem.Background>
</PivotItem.ContentTemplate>
</PivotItem>
<!-- NEWS -->
<PivotItem x:Uid="homePivotitemNews"
Margin="19,14.5,0,0"
CommonNavigationTransitionInfo.IsStaggerElement="True" >
<PivotItem.DataContext>
<Binding Path="NewsViewModel" Source="{StaticResource Locator}"/>
</PivotItem.DataContext>
<PivotItem.ContentTemplate>
<DataTemplate>
<Grid>
<ListView ItemsSource="{Binding News}"
IsItemClickEnabled="True"
SelectionMode="Single"
ContinuumNavigationTransitionInfo.ExitElementContainer="True">
...
</ListView>
</Grid>
</DataTemplate>
</PivotItem.ContentTemplate>
</PivotItem>
<!-- CONTACTS -->
<PivotItem x:Uid="homePivotitemContacts"
Margin="19,14.5,0,0"
CommonNavigationTransitionInfo.IsStaggerElement="True"
Header="Contacts">
<PivotItem.DataContext>
<Binding Path="ContactsViewModel" Source="{StaticResource Locator}"/>
</PivotItem.DataContext>
<PivotItem.ContentTemplate>
<DataTemplate>
<Grid>
<ListView ItemsSource="{Binding Contacts}"
IsItemClickEnabled="True"
SelectionMode="Single"
ContinuumNavigationTransitionInfo.ExitElementContainer="True">
...
</ListView>
</Grid>
</DataTemplate>
</PivotItem.ContentTemplate>
</PivotItem>
...
</Pivot>
</Grid>
</Page>
因此该页面受限于 DataContext &#34; MainViewModelInstance &#34;,用于第一个PivotItem 。 其他PivotItems 拥有自己的 DataContext :&#34; NewsViemodel &#34;,&#34; ContactsViewModel &#34;,...
在每个 ViewModel 上,构造函数调用 L oad() 方法来更新此HomePage的数据。
我想在其中一个ViewModel正在加载数据时显示 StatusBarProgressIndicator ,并在加载所有数据时停止它。
目前,我显示 StatusBarProgressIndicatorby 调用&#34; ShowStatusBarProgress() &#34; &#34; MainViewModel &#34;中的方法:
private async void LoadData()
{
ShowStatusbarProgress();
// Load data
...
HideStatusbarProgress();
}
private async void ShowStatusbarProgress()
{
progressbar.Text = "Please Wait...";
await progressbar.ShowAsync();
}
private async void HideStatusbarProgress()
{
await progressbar.HideAsync();
}
但我不知道如何考虑所有&#34; Load()&#34; ViewModels的方法。我听说过Messenger服务,但我不知道它在我的情况下是如何工作的。