Como vincular a visibilidade de um botão a um valor bool no meu 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
fonte
fonte
Respostas:
Assumindo que
AdvancedFormat
é umbool
, você precisa declarar e usar umBooleanToVisibilityConverter
:Observe o adicionado
Converter={StaticResource BoolToVis}
.Esse é um padrão muito comum ao trabalhar com o MVVM. Em teoria, você pode fazer a conversão você mesmo na propriedade ViewModel (ou seja, apenas tornar a propriedade do tipo
Visibility
), embora eu prefira não fazer isso, já que agora você está mexendo na separação de preocupações. A visibilidade de um item deve realmente estar na visualização.fonte
Existe uma terceira maneira que não requer um conversor ou uma alteração no seu modelo de exibição: use um estilo:
Eu tendem a preferir essa técnica porque a uso em muitos casos em que o que estou vinculando não é booleano - por exemplo, exibindo um elemento apenas se
DataContext
não for nulo ou implementando exibições de vários estados em que diferentes layouts aparecem com base no configuração de uma enumeração no modelo de vista.fonte
TextBlock
a queTextWrapping="Wrap"
foi dado. Agora essa propriedade de quebra automática não está definida nela.Conversão bidirecional em c # de booleano para visibilidade
fonte
Geralmente, existem duas maneiras de fazer isso, uma classe de conversor ou uma propriedade no Viewmodel que basicamente converte o valor para você.
Costumo usar a abordagem de propriedade se for uma conversão única. Se você deseja reutilizá-lo, use o conversor. Abaixo, encontre um exemplo do conversor:
Um método de propriedade ViewModel apenas verifica o valor da propriedade booleana e retorna uma visibilidade com base nisso. Certifique-se de implementar INotifyPropertyChanged e chame-o nas propriedades booleana e de visibilidade para atualizar corretamente.
fonte
Isso pode ser conseguido de uma maneira muito simples 1. Escreva isso na exibição.
A seguir está a propriedade booleana que contém o valor verdadeiro / falso. A seguir está o trecho de código. No meu exemplo, essa propriedade está na classe UserNote.
É assim que a propriedade IsHide obtém o valor.
fonte
Em vista:
Em vista Modelo:
Você precisará ter um evento alterado de propriedade
É assim que eles usam o Model-view-viewmodel
Mas como você deseja que ele seja vinculado a um booleano, você precisará de algum conversor. Outra maneira é definir um booleano fora e, quando esse botão for clicado, defina o property_advancedFormat com a visibilidade desejada.
fonte
private Visibility _advancedFormat = Visibility.visible
Isso funciona bem noUWP
obrigado.Desde o Windows 10 15063 para cima
Desde o Windows 10 compilação 15063, há um novo recurso chamado "Conversão implícita de visibilidade" que vincula Visibilidade ao valor bool nativo - Não é mais necessário usar um conversor.
(consulte https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary-update.aspx#Implicit_Visibility_conversion ).
Meu código (que supõe que o MVVM seja usado e o Modelo 10 também):
fonte