Sé que puedo hacer un setter que verifique si un valor es NULL y haga algo. Ejemplo:
<TextBlock>
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding SomeField}" Value="{x:Null}">
<Setter Property="TextBlock.Text" Value="It's NULL Baby!" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Pero, ¿cómo puedo verificar si hay un valor "no" ... como en "NOT NULL" o "NOT = 3"? ¿Es eso posible en XAML?
Resultados: Gracias por sus respuestas ... Sabía que podía hacer un convertidor de valor (lo que significa que tendría que ir en código, y eso no sería puro XAML como esperaba). Sin embargo, eso responde a la pregunta de que efectivamente "no" no puedes hacerlo en XAML puro. La respuesta seleccionada, sin embargo, muestra probablemente la mejor manera de crear ese tipo de funcionalidad. Buen descubrimiento.
fuente
Puede usar un IValueConverter para esto:
Donde IsNullConverter se define en otro lugar (y conv se establece para hacer referencia a su espacio de nombres):
Una solución más general sería implementar un IValueConverter que verifique la igualdad con el ConverterParameter, para que pueda verificar cualquier cosa, y no solo nulo.
fuente
Esto es un poco tramposo, pero solo configuré un estilo predeterminado y luego lo anulé usando un DataTrigger si el valor es nulo ...
fuente
Comparar con nulo (como dijo Michael Noonan):
Comparar con no nulo (sin convertidor):
fuente
Estoy usando esto para habilitar solo un botón si se selecciona un elemento de vista de lista (es decir, no es nulo):
fuente
Puede usar la
DataTrigger
clase en Microsoft.Expression.Interactions.dll que viene con Expression Blend .Código de muestra:
Usando este método puedes disparar contra
GreaterThan
yLessThan
también. Para utilizar este código, debe hacer referencia a dos dll:fuente
Acabo de usar la lógica inversa aquí ... establecer mi panel de pila en invisible cuando mi comboitem no está lleno, ¡funciona bastante bien!
fuente
¡Detener! ¡Sin convertidor! No quiero "vender" la biblioteca de este tipo, pero odiaba el hecho de hacer un conversor cada vez que quería comparar cosas en XAML.
Entonces, con esta biblioteca: https://github.com/Alex141/CalcBinding
puedes hacer eso [y mucho más]:
Primero, en la declaración de windows / userControl:
entonces, en el bloque de texto
La parte mágica es la conv: Enlace 'MYValue == null' . De hecho, puedes establecer cualquier condición que desees [mira el documento].
Tenga en cuenta que no soy un fanático de terceros. pero esta biblioteca es gratuita y tiene poco impacto (solo agregue 2 .dll al proyecto).
fuente
Mi solución está en la instancia de DataContext (o ViewModel si usa MVVM). Agrego una propiedad que devuelve verdadero si se cumple la condición No nula que deseo.
y vincular el DataTrigger a la propiedad anterior. Nota: en VB.NET, asegúrese de utilizar el operador If y NOT la función IIf, que no funciona con objetos nulos. Entonces el XAML es:
fuente
Si está buscando una solución que no use IValueConverter, siempre puede ir con el siguiente mecanismo
fuente
Convertidor:
Unión:
fuente
Puede usar un convertidor o crear una nueva propiedad en su ViewModel así:
y úsalo:
fuente