将XAML Visibility属性绑定到Thread.CurrentPrincipal

时间:2011-07-23 14:21:16

标签: c# wpf security

在我的WPF客户端应用程序中,我使用GenericIdentity来保证安全性:

GenericIdentity MyIdentity = new GenericIdentity("Identity");
String[] MyStringArray = { "Admin", "Editor" };
GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity, MyStringArray);

现在我想根据用户角色显示/隐藏WPF对象。 我尝试了几种方法,例如:

Visibility="{Binding Source=Thread.CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"

使转换器中的'value'对象成为“Thread.CurrentPrincipal”的字符串,也尝试过:

Visibility="{Binding Path=Thread.CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}" 

Visibility="{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}"

完全跳过转换器。 这是我的第一个C#/ .net程序,所以我在该领域并没有太多的知识,非常感谢一个解决方案。谢谢!

2 个答案:

答案 0 :(得分:2)

首先,要访问静态属性,您需要使用x:Static markup extension

Visibility="{Binding Source={x:Static Threading:Thread.CurrentPrincipal},
    Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Admin}"

这假设你有

xmlns:Threading="clr-namespace:System.Threading;assembly=mscorlib"

在XAML的根元素上。

其次,您不会显示您如何设置主体,而是you have to do it using AppDomain.SetThreadPrincipal()

第三,您将角色设置为Admin,然后检查Administrator

答案 1 :(得分:0)

在代码隐藏(C#)中,您需要将控件的DataContext设置为包含Thread.CurrentPrincipal的对象。然后在XAML中,你是第二种方式。