【问题标题】:C# - UWP: Load different view in one base viewsC# - UWP:在一个基本视图中加载不同的视图
【发布时间】:2017-04-07 09:49:15
【问题描述】:

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

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

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

  • BaseView.xaml(这是我要加载 Aview 或 Bview 的(主)视图)
  • AView.xaml
  • BView.xaml

也许有人可以帮助我吗?

谢谢。

【问题讨论】:

    标签: c# xaml view uwp uwp-xaml


    【解决方案1】:

    您可以将 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();
            }
        }
    

    【讨论】:

      【解决方案2】:

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

      干杯!

      【讨论】:

        猜你喜欢
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2018-11-13
        相关资源
        最近更新 更多