我正在开发一个WinRT应用程序,它有许多用户角色。我的应用程序中的许多页面的视图根据用户角色进行更改
就像。我有一个学生角色和一个教授角色。当学生登录时,他将看到收到的个人信息、性能图表、待办事项和徽章;当教授登录时,她将看到她收到的个人信息、待办事项和反馈。
如何只显示必要的组件?
绑定Grid.Visibility是一种很好的方法,还是有更好的方法?
更新:
通过使用@Ahmed(下面的答案)建议的方式,我将加载设计中的所有控件,并且只更改它的可见性。我的页面还会很重。
无论怎样,我是否只能加载我希望看到的控件?
发布于 2013-05-28 17:36:52
当然,有很多方法可以组成你的UI。
Visibility来显示或隐藏UI的各个部分。VisualStateManager显示或隐藏各种视图,甚至更改模板。ItemsControl的ItemTemplateSelector来根据视图模型的输入集合显示不同的项目--例如,对于学生来说,ItemsControl的ItemsSource将绑定到接收到的个人信息、性能图表、待办事项和徽章的视图模型集合中,而对于教授来说,您将获得有关个人信息、待办事项和反馈的视图模型。ItemTemplateSelector将提供这些特定项的不同视图。ItemsControl和ItemTemplateSelector显示相同视图模型的不同视图,具体取决于传递给选择器的用户角色。ContentControl的ContentTemplateSelector,它将根据绑定到Content属性的视图模型中提供的用户角色信息提供不同的视图。UserControl中,每个视图使用上述任何一种技术来显示/隐藏特定视图。以上所有这些都将从使用MVVM模式中获益良多。技术的选择或者更确切地说是技术的组合将取决于您想要显示的信息、它应该如何布局、您希望它的可维护性与最初开发的速度、您希望它的安全性以及最终您知道的、愿意学习或有时间学习的程度。
如果没有太多的角色--我个人可能会为每个角色创建一个单独的应用程序,并尽可能多地重用代码,尽管这还取决于其他一些需求--比如两个人从同一个设备访问系统的能力。我根本不会使用显示/隐藏技术,因为这仍然需要加载UI、耗尽内存等等。大多数应用程序都有某种中央集线器/仪表板,作为GridView或其他布局,并显示数据/链接的缩短预览,以进入详细视图或完整列表。这就是我在视图模型中为不同角色提供不同数据的地方。细节页面可能不需要那么多定制,因为每个角色的数据看起来基本相同,或者某些角色根本无法访问。当然,根据权限的不同,有些人可能被允许编辑或查看更多/更少的数据。对于这种较小的差异,您可以使用模板选择器,提供与视图模型不同的数据,并使用命令绑定控制编辑按钮的可见性。
答案可能是相当广泛和模糊的,因为这里有很多取决于您的具体设计和要求。
发布于 2013-05-24 05:03:36
您可以制作类似这样的转换器,这将根据角色更改可见性。
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 }/>https://stackoverflow.com/questions/16727838
复制相似问题