【发布时间】:2014-01-03 19:35:55
【问题描述】:
我想为我的系统创建一个用户权限验证,我创建了一个 enum class Permission 包含所有类型的权限,例如:CanInsert、CanEdit、CanAccess、CanDelete 等...
在我的class User 中有一个属性列表,其中包含该用户拥有的所有权限
我创建了一个converter PermissionToVisibleHiddenConverter 用于控件的可见性
public class PermissionToVisibleHiddenConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
User loger = (User)value;
/* Before edit
if (loger.Permissao.Contains(Permission.Principal_AbrirLoja))
return Visibility.Collapsed;
else
return Visibility.Collapsed; */
if (loger.Permissao.Contains(Permission.Principal_AbrirLoja))
return Visibility.Visible;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是当我尝试使用此代码绑定时它不起作用
<!--<MenuItem Header="Abrir loja" Visibility="{Binding Loger, Converter={StaticResource BoolToVisibleHiddenConverter}, ElementName=window, TargetNullValue=Collapsed, Mode=OneWay}"/>-->
<MenuItem Header="Abrir loja" Visibility="{Binding Loger, Converter={StaticResource PermissionToVisibleHiddenConverter }, ElementName=window, TargetNullValue=Collapsed, Mode=OneWay}"/>
此 MenuItem 父级类似于此的窗口在哪里,但 Loger 不为空
public partial class MainWindow : Window
{
User Loger { get; set; }
public MainWindow()
{
InitializeComponent();
}
}
这段代码不会抛出任何异常或错误,什么也不做
问题出在哪里?
【问题讨论】:
-
在
loger.Permissao.Contains (Permission.Principal_AbrirLoja)的情况下,您在这两种情况下都返回Visibility.Collapsed。如此构思还是错字? -
是的,我已将其用于测试,但我的 MenuItem 始终可见
-
在
MenuItem中您使用BoolToVisibleHiddenConverter,但有问题表明PermissionToVisibleHiddenConverter... 可能用于测试。无论如何,尝试设置Mode="TwoWay"并删除ElementName,(您也可以删除TargetNullValue)也许有帮助。 -
我现在试了一下,同样的,没有错误没有效果
标签: wpf binding ivalueconverter