Page.BottomAppBar未在启用NavigationCacheMode的情况下刷新

时间:2014-10-06 19:46:23

标签: c# xaml mvvm windows-phone-8.1

以下是我在Windows Phone 8.1中的当前App流程:

  • 我有一个带有Pivot和BottomAppBar的MainPage
  • 使用MainPage中的上述代码填充数据透视表项目内容:
    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项目导航时它才会出现。

你能建议一个解决方法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

最后,在1天之后,我突然找到了一个可以解决问题的解决方案。 不知何故,在设置BottomAppBar.UpdateLayout()之前调用DataContext会强制条形图重新绘制到绑定。

希望这会对某人有所帮助。