C# - UWP:在一个基本视图中加载不同的视图

时间:2017-04-07 09:49:16

标签: c# xaml view uwp uwp-xaml

我是一名软件开发人员,我的学校项目正在搜索在 Base 视图中加载不同视图的解决方案。 我有一个UWP应用程序,它运行在Raspberry Pi上 对于我的应用程序,我需要在两个用户(常规用户和专家用户)之间进行导航。

那我的问题是什么?
如何在两个用户之间切换,但没有重新加载视图(页面)?
视图无法刷新,因为内容是实时的,并且在用户视图之间切换时也必须运行。

这是一个C#Uwp应用程序。 现在我有文件:

  • BaseView.xaml(这是我要加载Aview或Bview的(主要)视图)
  • AView.xaml
  • BView.xaml
有人可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以将ContentPresenter放入BaseView。 然后将AView和BView包装到数据模板中。现在,您可以使用转换器选择ContentPresenter显示的模板。

<Page>
    <Page.Resources>
        <DataTemplate x:Key="AViewTemplate">
            <views:AView />
        </DataTemplate>
        <DataTemplate x:Key="BViewTemplate">
            <views:BView />
        </DataTemplate>
        <conv:ModeToTemplateConverter ATemplate="{StaticResource AViewTemplate}" BTemplate="{StaticResource BViewTemplate}" />
    </Page.Resources>

    <ContentPresenter Content="{Binding YourViewModel}" 
                      ContentTemplate="{Binding Mode, Converter={StaticResource ModeToTemplateConverter}}" />
</Page>

转换器可以是这样的:

    public class ModeToTemplateConverter : IValueConverter
    {
        public DataTemplate ATemplate { get; set; }

        public DataTemplate BTemplate { get; set; }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var mode = value as Mode?;
            switch (mode)
            {
                case Mode.A:
                    return ATemplate;
                case Mode.B:
                    return BTemplate;
                default:
                    return null;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

答案 1 :(得分:0)

您可以在BaseView.xaml文件中根据需要同时拥有这两种视图。你有两个网格 - 一个用于AView,另一个用于BView,然后最终根据你的用户标准隐藏/显示两个网格的可见性。

干杯!