silverlight开发实例(Prism+MVVM+RIA)(四)--设置菜单权限
来源:互联网 发布:哔哩哔哩软件 编辑:程序博客网 时间:2024/06/13 02:27
在菜单加载后需要根据登录人身份对菜单进行权限控制,此例是对菜单是否可用进行控制,由于原有的Model中并没有一个字段去标示菜单是否可以,那么需要重载菜单类,添加属性比便可以绑定到菜单项的IsEnabled,在判断时需要将用户的有权菜单列表与当前菜单项的ID进行比较即可。看图
如上图,用户管理当前用户有权操作菜单,而其他菜单无权操作显示为灰色。具体实现如下:
1、重载菜单Model,增加控制属性,此处需要注意的是该类的命名空间需要与共享代码的命名空间一致。
public partial class T_SYS_APPLICATION { bool isEnabled = false; public bool IsEnabled { get { return isEnabled; } set { isEnabled = value; RaisePropertyChanged("IsEnabled"); } } bool isSelected = false; public bool IsSelected { get { return isSelected; } set { isSelected = value; RaisePropertyChanged("IsSelected"); } } }
2、在加载菜单项时对菜单项的控制属性进行设置
void applicationService_GetApplicationListQueryComplete(object sender, EntityResultsArgs<T_SYS_APPLICATION> e) { this.ApplicationList.Clear(); if (!e.HasError) { foreach (var u in e.Results) { u.IsEnabled = GetCurrentAppEnabled(u.SAPPLICATIONID); this.ApplicationList.Add(u); } } }
bool GetCurrentAppEnabled(string appid) { //bool bEnable = false; var u = from n in this.UserAppList where n.SAPPLICATIONID == appid select n; if (u == null || u.Count<V_SYS_USERAPPLICATION>()==0) return false; else return true; }
3、此例中的菜单项采用的是ListBox,对菜单项的鼠标放下事件进行事件绑定,模拟鼠标点击,同时为了能够实现无权菜单显示为灰色,需要在Listbox中的菜单项模版中加入一个Rectangle,并通过绑定opacity设置是否显示,为此还需要加入一个转换的类,将bool转换为visabled。
void OnAppSelectedChanged(T_SYS_APPLICATION selectedApp) { if (selectedApp != null && !string.IsNullOrEmpty(selectedApp.SURL) && selectedApp.IsEnabled) { this.regionManager.RequestNavigate(RegionNames.MainContentRegion, selectedApp.SURL); this.eventAggregator.GetEvent<CommandEvent>().Publish(new CommandEventPara() { CommandName = "ApplicationSelectedChanged", Entity = selectedApp }); } }
public class VisibilityConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToBoolean(value) ? Visibility.Collapsed : Visibility.Visible; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (Visibility)value == Visibility.Visible; } #endregion }
<Rectangle x:Name="rectangle" Fill="#B3B1B1B4" Margin="0" Stroke="Black" Visibility="{Binding IsEnabled, Converter={StaticResource VisibilityConverter}}" RadiusY="5" RadiusX="5" StrokeThickness="0"/>
这样一个基本的用户导航页面就完成了,后期还可将用户操作的菜单项加入到下方一个Listbox中,这样通过对listbox项目进行切换实现主操作界面的切换,类似windows中下方的状态条功能。
- silverlight开发实例(Prism+MVVM+RIA)(四)--设置菜单权限
- silverlight开发实例(Prism+MVVM+RIA)(一)--开发架构
- silverlight开发实例(Prism+MVVM+RIA)(二)--创建shell及用户登录
- silverlight开发实例(Prism+MVVM+RIA)(三)--创建页面导航
- silverlight开发实例(Prism+MVVM+RIA)(五)--View及ViewModel间通信
- silverlight 学习笔记 (四): MVVM+WCF Ria开发架构
- Prism应用开发(四)——MVVM模式基础
- Prism应用开发(四)——MVVM模式基础
- Prism框架(四)——MVVM模式基础
- Prism框架(四)——MVVM模式基础
- Prism框架(四)——MVVM模式基础
- Prism MVVM实例
- Prism MVVM实例
- Prism应用开发(五)——MVVM模式关键技术
- Prism应用开发(六)——MVVM高级话题
- Prism应用开发(五)——MVVM模式关键技术
- Prism应用开发(六)——MVVM高级话题
- 一个简单的 Silverlight 4 应用程序(MEF+ MVVM+ WCF RIA Services)第一部分
- Servlet多线程问题
- VC编程经验总结--持续中……
- hdu 4185Oil Skimming (二分匹配)
- 仿百度文库制作(2)-----------flexpaper
- android一个项目引用另外的项目的内容
- silverlight开发实例(Prism+MVVM+RIA)(四)--设置菜单权限
- 线程术语
- Linux 信号说明列表
- c++变量在堆中还是栈中
- E-TASK--(3) 设计登录界面
- 几个CGRect 函数列子
- 进程的用户ID探究
- [EGORefreshTableHeaderView]手动启动下拉更新的方法
- iPhone、iPad 即将过气 Apple TV 才是苹果的未来