Скрыть конкретный TabItem в TabControl, если не администратор - PullRequest
1 голос
/ 30 марта 2012

Я работаю с TabControl в XAML,

, однако я хочу, чтобы в зависимости от пользователя были доступны только определенные элементы TabItems.

Admins = 1, поэтому должен иметь полный доступ к TabControl,

Не admins = 0, следовательно, должны быть доступны только определенные вкладки.

Как скрыть определенные вкладки в зависимости от пользователя?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Есть много способов сделать это, и я полагаю, какой вы используете, зависит от того, где хранится флаг IsAdmin

Мое личное предпочтение - DataTrigger, основанное на статическом User объекте, который устанавливается при первом входе пользователя в систему

.
<Style TargetType="{x:Type TabItem}">
    <Setter Property="Visibility" Value="Collapsed" />
    <Style.Triggers>
        <DataTrigger Value="True" Binding="{Binding IsAdmin, Source={x:Static local:Settings.CurrentUser}}">
            <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
    </Style.Triggers>
</Style>

Settings будет статическим классом, который содержит свойство CurrentUser, которое устанавливается при запуске приложения и входе пользователя в систему. CurrentUser имеет логическое свойство с именем IsAdmin

1 голос
/ 30 марта 2012

Создайте конвертер значений:

[ValueConversion(typeof(bool), typeof(Visibility))]
public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool myValue = (bool)value;

        if (myValue)
            return Visibility.Visible;
        else
            return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Добавьте это как ресурс в свой XAML:

 <local:BooleanToVisibilityConverter x:Key="visibilityConverter"></local:VisibilityConverter>

Предположим, что ваше свойство, которое показывает, является ли пользователь администратором с именем IsAdmin

<TabItem Visibility={Binding Path=IsAdmin, Converter={StaticResource visibilityConverter}}">

Я думаю, что это все.

0 голосов
/ 30 марта 2012

Вы можете скрыть все вкладки после загрузки приложения, а затем сделать что-то простое, например, следующее, чтобы показать каждую вкладку в зависимости от уровня доступа пользователя:

if (userId == 1) {
  foreach (var item in tabControl.Items) {
    item.Visibility = Visibility.Visible;
}

} else if (userId == 0) {
   tabControl.Items[TableControlYouWantVisibile].Visibility = Visibility.Visible;
}
...