基于角色的视图XAML
我正在开发一个WinRT应用程序,它有许多用户角色。“我的应用”中许多页面的视图会根据用户角色发生变化 我有一个学生角色和一个教授角色。当学生登录时,他将看到收到的个人信息、绩效表、待办事项和徽章;当教授登录时,她将看到收到的个人信息、待办事项和反馈 如何仅显示必要的组件 绑定Grid.Visibility是一种很好的方法还是有更好的方法 更新:基于角色的视图XAML,xaml,mvvm,windows-runtime,winrt-xaml,Xaml,Mvvm,Windows Runtime,Winrt Xaml,我正在开发一个WinRT应用程序,它有许多用户角色。“我的应用”中许多页面的视图会根据用户角色发生变化 我有一个学生角色和一个教授角色。当学生登录时,他将看到收到的个人信息、绩效表、待办事项和徽章;当教授登录时,她将看到收到的个人信息、待办事项和反馈 如何仅显示必要的组件 绑定Grid.Visibility是一种很好的方法还是有更好的方法 更新: 按照@Ahmed(以下答案)建议的方式进行操作,我将加载设计中的所有控件,并且只更改其可见性。我的页面仍然很重 是否可以只加载我希望看到的控件?您可以
按照@Ahmed(以下答案)建议的方式进行操作,我将加载设计中的所有控件,并且只更改其可见性。我的页面仍然很重
是否可以只加载我希望看到的控件?您可以制作一个类似这样的转换器,根据角色改变可见性
public class RoleToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var user= value as User;
if(user!= null) {
return user.IsInRole((string)parameter) ? Visibility.Visible : Visibility.Collapsed;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在XAML中,您可以使用转换器设置控件的可见性,如下所示
<Control Visibility={Binding Path=CurrentUser, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Student }/>
当然有很多方法可以组成您的UI
- 您可以根据建议使用
,以显示或隐藏UI的各个部分可见性
- 您可以使用
显示或隐藏各种视图,甚至更改模板VisualStateManager
- 您可以使用带有
的ItemTemplateSelector
来根据视图模型的输入集合显示不同的项目-例如,对于学生来说,ItemsControl
的ItemsControl
将绑定到个人信息、绩效图表、,收到TODO和徽章,对于教授,您将获得个人信息、TODO和收到的反馈的视图模型。ItemsSource
将提供这些特定项的不同视图ItemTemplateSelector
- 您还可以使用带有
的ItemTemplateSelector
来显示相同视图模型的不同视图,具体取决于要传递给选择器的用户角色ItemsControl
- 您可以将
与自定义控件一起使用,该自定义控件将根据绑定到ContentControl
属性的视图模型中提供的用户角色信息提供不同的视图Content
- 您可以编写一些代码,根据用户角色显示/隐藏/添加/删除UI组件
- 您可以将各种视图(徽章、个人信息、反馈等)封装在每个视图的单独
s中,并使用上述任何技术显示/隐藏特定视图UserControl
- 您可以为不同的用户角色设计不同的页面,并根据角色导航到特定页面
- 最后,您可以为不同的用户角色创建单独的应用程序
答案可能相当宽泛和模糊,因为这里的很多内容取决于您的具体设计和要求。这是正确的方法吗?这样,我将加载设计中的所有控件,只更改其可见性。我的页面仍然会很重,不管怎样,我只能加载我想要查看的控件。我不认为,还有其他方法。嘿,菲利普,我需要你的帮助。对不起,我不处理安全问题。