¿Cómo asocio la visibilidad de un botón a un valor bool en mi 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
fuente
fuente
Respuestas:
Suponiendo que
AdvancedFormat
es unbool
, debe declarar y usar unBooleanToVisibilityConverter
:Tenga en cuenta lo agregado
Converter={StaticResource BoolToVis}
.Este es un patrón muy común cuando se trabaja con MVVM. En teoría, podría hacer la conversión usted mismo en la propiedad ViewModel (es decir, simplemente hacer que la propiedad sea de tipo
Visibility
), aunque preferiría no hacerlo, ya que ahora está jugando con la separación de las preocupaciones. La visibilidad de un elemento realmente debería estar a la vista.fuente
Hay una tercera forma que no requiere un convertidor o un cambio en su modelo de vista: use un estilo:
Tiendo a preferir esta técnica porque la uso en muchos casos en los que lo que estoy vinculando no es booleano, por ejemplo, mostrar un elemento solo si
DataContext
no es nulo o implementar pantallas de varios estados donde aparecen diferentes diseños basados en el configuración de una enumeración en el modelo de vista.fuente
TextBlock
a la que meTextWrapping="Wrap"
dieron. Ahora esa propiedad de ajuste no está establecida en ella.Conversión bidireccional en c # de booleano a visibilidad
fuente
En general, hay dos formas de hacerlo, una clase de convertidor o una propiedad en el modelo de vista que esencialmente convierte el valor por usted.
Tiendo a usar el enfoque de propiedad si es una conversión única. Si desea reutilizarlo, use el convertidor. A continuación, encuentre un ejemplo del convertidor:
Un método de propiedad ViewModel simplemente verificaría el valor de la propiedad booleana y devolvería una visibilidad basada en eso. Asegúrese de implementar INotifyPropertyChanged y solicítelo en las propiedades Boolean y Visibility para actualizarlo correctamente.
fuente
Esto se puede lograr de una manera muy simple 1. Escriba esto en la vista.
La siguiente es la propiedad booleana que contiene el valor verdadero / falso. El siguiente es el fragmento de código. En mi ejemplo, esta propiedad está en la clase UserNote.
Esta es la forma en que la propiedad IsHide obtiene el valor.
fuente
En vista:
En vista Modelo:
Deberá tener un evento de cambio de propiedad
Así es como usan Model-view-viewmodel
Pero dado que desea que esté enlazado a un booleano, necesitará algún convertidor. Otra forma es establecer un valor booleano afuera y cuando se hace clic en ese botón, establezca el property_advancedFormat a la visibilidad deseada.
fuente
private Visibility _advancedFormat = Visibility.visible
Esto funciona bienUWP
gracias.Desde Windows 10 15063 hacia arriba
Desde Windows 10 build 15063, hay una nueva característica llamada "Conversión de visibilidad implícita" que une la visibilidad al valor bool de forma nativa: ya no es necesario usar un convertidor.
(consulte https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary-update.aspx#Implicit_Visibility_conversion ).
Mi código (que supone que se usa MVVM, y también la Plantilla 10):
fuente