Как показать различные элементы управления на основе условия в WPF? - PullRequest
5 голосов
/ 25 июня 2010

Мне в основном нужен раздел экрана с окном «аутентификация», в котором, если вы вошли в систему, отображается имя пользователя и кнопка «переключить пользователя», но если вы не вошли в систему, онапросто отображает кнопку входа в систему.

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

Спасибо

Ответы [ 2 ]

9 голосов
/ 11 июня 2011

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

В вашем App.xaml укажите

<Application.Resources>
    <BooleanToVisibilityConverter x:Key="VisibilityOfBool" />
</Application.Resources>

Для каждого элемента управления, которым вы хотите управлятьвидимость через логическое свойство в вашей модели представления вы можете просто сделать это.

Visibility="{Binding IsEditable, Converter={StaticResource VisibilityOfBool}}"

Это переключит видимость элемента управления на основе IsEditable.

3 голосов
/ 25 июня 2010

Ваш выбор иметь 2 отдельных элемента управления - фактически мой первый выбор.

Это имеет то преимущество, что позволяет вам тщательно и легко протестировать оба ваших элемента управления. Вы можете легко использовать триггеры для переключения видимого элемента управления на основе любых критериев в вашем DataContext. Это чисто, просто и достаточно элегантно.

При этом есть и другие варианты, если вы хотите этого избежать.

Например, вы можете использовать ContentPresenter для этой области «ящика» и привязать его содержимое к свойству в вашем DataContext, которое просто определяется как «объект». Затем вы можете во время выполнения установить его в отдельный тип, когда он аутентифицирован или не аутентифицирован. Указав DataTemplate для каждого из типов, WPF автоматически подключит соответствующий элемент управления для вас. (Это в основном подход MVMM в стиле ViewModel.)

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