Привязка атрибута видимости XAML к Thread.CurrentPrincipal - PullRequest
1 голос
/ 23 июля 2011

В моем клиентском приложении WPF я использую GenericIdentity для безопасности:

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

Теперь я хочу показать / скрыть объекты WPF в соответствии с ролью пользователя. Iv'e пробовал несколько методов, таких как:

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 ]

2 голосов
/ 23 июля 2011

Во-первых, для доступа к статическим свойствам необходимо использовать расширение разметки x:Static :

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

Предполагается, что у вас есть

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

в корневом элементе вашего XAML.

Во-вторых, вы не показываете, как установить принципал, но вы должны сделать это, используя AppDomain.SetThreadPrincipal().

В-третьих, вы устанавливаете роль на Admin, но затем проверяете на Administrator.

0 голосов
/ 23 июля 2011

В программном коде (C #) вам необходимо установить DataContext вашего элемента управления для объекта, который содержит Thread.CurrentPrincipal.Затем в XAML вы делаете это вторым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...