首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于角色的视图XAML

基于角色的视图XAML
EN

Stack Overflow用户
提问于 2013-05-24 04:50:26
回答 2查看 318关注 0票数 0

我正在开发一个WinRT应用程序,它有许多用户角色。我的应用程序中的许多页面的视图根据用户角色进行更改

就像。我有一个学生角色和一个教授角色。当学生登录时,他将看到收到的个人信息、性能图表、待办事项和徽章;当教授登录时,她将看到她收到的个人信息、待办事项和反馈。

如何只显示必要的组件?

绑定Grid.Visibility是一种很好的方法,还是有更好的方法?

更新:

通过使用@Ahmed(下面的答案)建议的方式,我将加载设计中的所有控件,并且只更改它的可见性。我的页面还会很重。

无论怎样,我是否只能加载我希望看到的控件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 17:36:52

当然,有很多方法可以组成你的UI。

  • 您可以按照建议使用Visibility来显示或隐藏UI的各个部分。
  • 您可以使用VisualStateManager显示或隐藏各种视图,甚至更改模板。
  • 您可以使用带有ItemsControlItemTemplateSelector来根据视图模型的输入集合显示不同的项目--例如,对于学生来说,ItemsControlItemsSource将绑定到接收到的个人信息、性能图表、待办事项和徽章的视图模型集合中,而对于教授来说,您将获得有关个人信息、待办事项和反馈的视图模型。ItemTemplateSelector将提供这些特定项的不同视图。
  • 还可以使用ItemsControlItemTemplateSelector显示相同视图模型的不同视图,具体取决于传递给选择器的用户角色。
  • 您可以使用带有自定义ContentControlContentTemplateSelector,它将根据绑定到Content属性的视图模型中提供的用户角色信息提供不同的视图。
  • 您可以编写一些代码来显示/隐藏/添加/删除基于用户角色的UI组件。
  • 您可以封装各种视图(徽章、个人信息、反馈等)。在单独的UserControl中,每个视图使用上述任何一种技术来显示/隐藏特定视图。
  • 您可以为不同的用户角色设计不同的页面,并根据角色导航到特定的页面。
  • 最后,您可以为不同的用户角色创建不同的应用程序。

以上所有这些都将从使用MVVM模式中获益良多。技术的选择或者更确切地说是技术的组合将取决于您想要显示的信息、它应该如何布局、您希望它的可维护性与最初开发的速度、您希望它的安全性以及最终您知道的、愿意学习或有时间学习的程度。

如果没有太多的角色--我个人可能会为每个角色创建一个单独的应用程序,并尽可能多地重用代码,尽管这还取决于其他一些需求--比如两个人从同一个设备访问系统的能力。我根本不会使用显示/隐藏技术,因为这仍然需要加载UI、耗尽内存等等。大多数应用程序都有某种中央集线器/仪表板,作为GridView或其他布局,并显示数据/链接的缩短预览,以进入详细视图或完整列表。这就是我在视图模型中为不同角色提供不同数据的地方。细节页面可能不需要那么多定制,因为每个角色的数据看起来基本相同,或者某些角色根本无法访问。当然,根据权限的不同,有些人可能被允许编辑或查看更多/更少的数据。对于这种较小的差异,您可以使用模板选择器,提供与视图模型不同的数据,并使用命令绑定控制编辑按钮的可见性。

答案可能是相当广泛和模糊的,因为这里有很多取决于您的具体设计和要求。

票数 1
EN

Stack Overflow用户

发布于 2013-05-24 05:03:36

您可以制作类似这样的转换器,这将根据角色更改可见性。

代码语言:javascript
复制
 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中,可以使用转换器设置控件的可见性,如下所示

代码语言:javascript
复制
<Control Visibility={Binding Path=CurrentUser, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Student }/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16727838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档