Как привязать видимость кнопки к значению типа bool в моей ViewModel?
<Button Height="50" Width="50" Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}" Cursor="Hand"
Visibility="{Binding Path=AdvancedFormat}" />
c#
wpf
xaml
data-binding
raym0nd
источник
источник
Ответы:
Предполагая, что
AdvancedFormat
это abool
, вам нужно объявить и использоватьBooleanToVisibilityConverter
:Обратите внимание на добавленный
Converter={StaticResource BoolToVis}
.Это очень распространенный паттерн при работе с MVVM. В теории можно сделать преобразование самостоятельно на имуществе ViewModel (т.е. просто сделать свойство самого типа
Visibility
) , хотя я бы предпочел не делать этого, так как теперь вы будете баловаться с разделением проблем. Видимость элемента действительно должна зависеть от View.источник
Есть третий способ, который не требует конвертера или изменения вашей модели представления: используйте стиль:
Я предпочитаю этот метод, потому что использую его во многих случаях, когда то, к чему я привязываюсь, не является логическим - например, отображение элемента только в том случае, если
DataContext
он не равен нулю, или реализация дисплеев с несколькими состояниями, где отображаются разные макеты на основе установка перечисления в модели представления.источник
TextBlock
которыйTextWrapping="Wrap"
был отдан. Теперь это свойство упаковки в нем не задано.Двухстороннее преобразование в c # из логического в видимость
источник
Как правило, это можно сделать двумя способами: класс преобразователя или свойство в модели просмотра, которое по сути преобразует значение за вас.
Я предпочитаю использовать имущественный подход, если это разовая конверсия. Если вы хотите использовать его повторно, воспользуйтесь конвертером. Ниже вы найдете пример конвертера:
Метод свойства ViewModel просто проверяет значение логического свойства и возвращает видимость на основе этого. Обязательно реализуйте INotifyPropertyChanged и вызовите его для свойств Boolean и Visibility для правильного обновления.
источник
Этого можно добиться очень простым способом 1. Напишите это в представлении.
Ниже приводится логическое свойство, которое содержит значение истина / ложь. Ниже приведен фрагмент кода. В моем примере это свойство находится в классе UserNote.
Таким образом свойство IsHide получает значение.
источник
Ввиду:
В представлении Модель:
Вам потребуется событие изменения свойства
Вот как они используют модель-представление-модель просмотра
Но так как вы хотите привязать его к логическому, вам понадобится какой-нибудь конвертер. Другой способ - установить логическое значение снаружи, и при нажатии этой кнопки установите для свойства property_advancedFormat желаемую видимость.
источник
private Visibility _advancedFormat = Visibility.visible
Это отлично работает наUWP
спасибо.Начиная с Windows 10 15063 и выше
Начиная с Windows 10 build 15063, появилась новая функция, называемая «Неявное преобразование видимости», которая изначально привязывает видимость к значению типа bool - больше нет необходимости использовать преобразователь.
(см. https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary-update.aspx#Implicit_Visibility_conversion ).
Мой код (который предполагает, что используется MVVM, а также шаблон 10):
источник