【问题标题】: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,然后最后根据您的用户标准隐藏/显示两个网格的可见性。
干杯!