Использование ролей / разрешений для включения / отключения контента в представлении - PullRequest
1 голос
/ 24 сентября 2010

Я работаю над приложением WPF с использованием фреймворка mvvm-light. Я новичок в обоих из них.

У меня есть форма, которая позволяет пользователю редактировать запись в базе данных. Пользователи с правами администратора должны иметь возможность обновлять поле, которое должно быть доступно только для чтения другим пользователям. Для меня было бы легко поместить этот код включения / выключения в кодовое представление представления, но я понимаю, что это принадлежит ViewModel.

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

Заранее спасибо.

        <TextBox Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" Name="uxMallNum" VerticalAlignment="Center"
        Width="100" Height="25" MaxLength="50" Validation.ErrorTemplate="{DynamicResource validationTemplate}" Style="{DynamicResource textStyleTextBox}">
        <TextBox.Text>
            <Binding Path="MallNumber" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" >
                <Binding.ValidationRules>
                    <local:StringRangeValidationRule MinimumLength="1" MaximumLength="50" 
                                    ErrorMessage="Mall Number is required and must be 50 characters or fewer." />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

1 Ответ

1 голос
/ 24 сентября 2010

Я создал конвертер для этого типа функций, хотя я не уверен, что есть лучший способ.

public class AdminVisibilityConverter : IValueConverter
{
    #region Methods
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool isAdmin = WebContext.Current.User.IsInRole("Admin");

        return isAdmin ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}

Затем я добавляю конвертер в свойство видимости элемента управления.

<toolkit:AccordionItem Tag="#ManageAnnouncements" Visibility="{Binding Source=User, Converter={StaticResource AdminVisibilityConverter}}">

Вы можете передать роли или имена пользователей в параметре конвертера, но моему экземпляру это не нужно.

...