以下是我在Windows Phone 8.1中的当前App流程:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (RootPivot.Items == null) return;
RootPivot_OnPivotItemLoaded(RootPivot, new PivotItemEventArgs { Item = RootPivot.Items[RootPivot.SelectedIndex] as PivotItem });
}
private void RootPivot_OnPivotItemLoaded(Pivot sender, PivotItemEventArgs args)
{
if (args.Item.Content == null) args.Item.Content = CreateUserControlForPivotItem((string)args.Item.Header, sender);
var content = args.Item.Content as UserControl;
if (content == null || content.DataContext == null)
{
BottomAppBar.DataContext = null;
return;
}
BottomAppBar.DataContext = null;
BottomAppBar.DataContext = content.DataContext;
var viewModel = content.DataContext as IRefreshableViewModel;
if (viewModel != null) viewModel.Refresh();
}
private static UserControl CreateUserControlForPivotItem(string pivotItemHeader, Pivot pivot)
{
UserControl item = null;
switch (pivotItemHeader)
{
case "Appointments":
item = new AppointmentsPivotItem();
break;
case "Profile":
item = new ProfilePivotItem();
break;
}
return item;
}
每个UserControl都有一个ViewModel作为DataContext,它负责处理BottomAppBar:
<Page.BottomAppBar>
<CommandBar x:Name="BottomAppBar" Foreground="#FFFEFEFE" Background="{StaticResource BlueColorBrush}" Visibility="{Binding Converter={StaticResource BooleanToVisibilityConverter}, Path=RequiresBottomAppBar, FallbackValue=Collapsed}">
<CommandBar.PrimaryCommands>
<AppBarButton Icon="Add" Label="{Binding AppBarButtonAdd}" Command="{Binding AppBarButtonAddCommand}" Visibility="{Binding Converter={StaticResource BooleanToVisibilityConverter}, Path=RequiresAppBarButtonAdd, FallbackValue=Collapsed}"> </AppBarButton>
<AppBarButton Icon="Find" Label="{Binding AppBarButtonFind}" Command="{Binding AppBarButtonFindCommand}" Visibility="{Binding Converter={StaticResource BooleanToVisibilityConverter}, Path=RequiresAppBarButtonFind, FallbackValue=Collapsed}"></AppBarButton>
</CommandBar.PrimaryCommands>
</CommandBar>
</Page.BottomAppBar>
在AppointmentsPivotItem上我有一个ListView,当我尝试从项目详细信息页面导航回列表时问题就开始了。
MainPage有NavigationCacheMode="Enabled"
,当导航回来时会调用AppBar的绑定,但是直到我通过Pivot项目导航时它才会出现。
你能建议一个解决方法吗? 提前谢谢。
答案 0 :(得分:0)
最后,在1天之后,我突然找到了一个可以解决问题的解决方案。
不知何故,在设置BottomAppBar.UpdateLayout()
之前调用DataContext
会强制条形图重新绘制到绑定。
希望这会对某人有所帮助。