Estoy usando a BooleanToVisibilityConverter
en WPF para vincular la Visibility
propiedad de un control a a Boolean
. Esto funciona bien, pero me gustaría que uno de los controles se oculte si el booleano es true
y muestre si es así false
.
.net
wpf
binding
visibility
Ruben Bartelink
fuente
fuente
Respuestas:
Implemente su propia implementación de IValueConverter. Una implementación de muestra está en
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
En su método Convert, haga que devuelva los valores que desea en lugar de los valores predeterminados.
fuente
En lugar de invertir, puede lograr el mismo objetivo utilizando una
IValueConverter
implementación genérica que puede convertir un valor booleano en valores objetivo configurables para verdadero y falso. A continuación se muestra una de esas implementaciones:Luego, subclase donde
T
estáVisibility
:Finalmente, así es como podría usar
BooleanToVisibilityConverter
arriba en XAML y configurarlo para, por ejemplo, usarCollapsed
para verdadero yVisible
para falso:Esta inversión es útil cuando desea enlazar a una propiedad booleana denominada
IsHidden
opuestaIsVisible
.fuente
Visibility
propiedades en su modelo de vista.y luego pasar un verdadero o falso como ConverterParameter
fuente
else if (value is bool?)
parte, ReSharper me dice "La expresión siempre es falsa". Además, laif (flag)
parte se puede reescribir de manera más concisa comoreturn flag ? Visibility.Visible : Visibility.Collapsed;
.var nullable = (bool?)value; flag = nullable.GetValueOrDefault();
puede hacerse mucho más corto y simple:flag = (bool?)value ?? false;
Escribe la tuya es la mejor solución por ahora. Aquí hay un ejemplo de un convertidor que puede hacer ambas cosas: normal e invertido. Si tiene algún problema con esto, solo pregunte.
fuente
BooleanToVisibilityConverter
Parameter direction = Parameter.Normal; if (parameter != null) direction = (Parameter)Enum.Parse(typeof(Parameter), (string)parameter);
También está el proyecto WPF Converters en Codeplex. En su documentación, dicen que puede usar su MapConverter para convertir de la enumeración de Visibilidad a bool
fuente
Una forma más de vincular el valor booleano de ViewModel (IsButtonVisible) con la propiedad de visibilidad de control xaml. Sin codificación, sin conversión, solo estilo.
fuente
O la verdadera manera del hombre perezoso, solo usa lo que ya está allí y dale la vuelta:
fuente
Si no le gusta escribir un convertidor personalizado, puede usar disparadores de datos para resolver esto:
fuente
Acabo de hacer una publicación sobre esto. Usé una idea similar a la de Michael Hohlios. Solo que usé Propiedades en lugar de usar el "parámetro objeto".
Visibilidad vinculante a un valor bool en WPF
Usar propiedades lo hace más legible, en mi opinión.
fuente
Aquí hay uno que escribí y uso mucho. Utiliza un parámetro de convertidor booleano que indica si invertir o no el valor y luego usa XOR para realizar la negación:
Aquí hay una tabla de verdad XOR para referencia:
fuente
Estaba buscando una respuesta más general, pero no pude encontrarla. Escribí un convertidor que podría ayudar a otros.
Se basa en el hecho de que necesitamos distinguir seis casos diferentes:
Aquí está mi implementación para los primeros 4 casos:
ejemplo:
Creo que los parámetros son fáciles de recordar.
Espero que ayude a alguien.
fuente
Puedes usar QuickConverter .
Con QuickConverter puede escribir la lógica del convertidor en línea con su BindingExpression
Aquí hay un convertidor BooleanToVisibility invertido:
Puede agregar QuickConverter a través de NuGet. Echa un vistazo a la documentación para la configuración. Enlace: https://quickconverter.codeplex.com/
fuente
Escribe tu propio converso.
fuente
Una versión simple de una vía que se puede usar así:
puede implementarse así:
fuente
Convierta todo a todo (bool, string, enum, etc.):
Ejemplos de XAML:
fuente
En lugar de escribir su propio código / reinventar, considere usar CalcBinding :
CalcBinding también es bastante útil para muchos otros escenarios.
fuente
Sé que esto está anticuado, pero no es necesario volver a implementar nada.
Lo que hice fue negar el valor de la propiedad de esta manera:
....
¡Y funciona bien!
¿Me estoy perdiendo de algo?
fuente