Eu sei que posso fazer um setter que verifica se um valor é NULL e faz alguma coisa. Exemplo:
<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>
Mas como posso verificar um valor "not" ... como em "NOT NULL" ou "NOT = 3"? Isso é possível no XAML?
Resultados: Obrigado por suas respostas ... Eu sabia que poderia fazer um conversor de valor (o que significa que eu precisaria digitar o código e isso não seria puro XAML como eu esperava). No entanto, isso responde à pergunta de que efetivamente "não" não é possível em XAML puro. A resposta selecionada, no entanto, mostra provavelmente a melhor maneira de criar esse tipo de funcionalidade. Boa descoberta.
fonte
Você pode usar um IValueConverter para isso:
Onde IsNullConverter é definido em outro lugar (e conv é definido para referenciar seu espaço para nome):
Uma solução mais geral seria implementar um IValueConverter que verifique a igualdade com o ConverterParameter, para que você possa verificar qualquer coisa, e não apenas nulo.
fonte
Isso é meio trapaceiro, mas eu apenas defini um estilo padrão e o substituí usando um DataTrigger se o valor for nulo ...
fonte
Compare com null (como disse Michael Noonan):
Compare com not null (sem um conversor):
fonte
Estou usando isso para ativar apenas um botão se um item de exibição de lista estiver selecionado (ou seja, não nulo):
fonte
Você pode usar a
DataTrigger
classe no Microsoft.Expression.Interactions.dll que acompanha o Expression Blend .Exemplo de código:
Usando esse método, você pode acionar contra
GreaterThan
eLessThan
também. Para usar esse código, você deve referenciar duas DLLs:fonte
Acabei de usar a lógica inversa aqui ... configurando meu stackpanel para invisível quando meu comboitem não está preenchido, funciona muito bem!
fonte
Pare! Sem conversor! Eu não quero "vender" a biblioteca desse cara, mas eu odiava o fato de fazer conversor toda vez que queria comparar coisas em XAML.
Portanto, com esta biblioteca: https://github.com/Alex141/CalcBinding
você pode fazer isso [e muito mais]:
Primeiro, na declaração do windows / userControl:
então, no bloco de texto
A parte mágica é a conv: Vinculação 'MYValue == null' . De fato, você pode definir qualquer condição que desejar [consulte o documento].
note que eu não sou fã de terceiros. mas essa biblioteca é gratuita e tem pouco impacto (basta adicionar 2 .dll ao projeto).
fonte
Minha solução está na instância DataContext (ou ViewModel, se estiver usando MVVM). Eu adiciono uma propriedade que retorna true se a condição Não Nula que eu quero for atendida.
e vincule o DataTrigger à propriedade acima. Nota: No VB.NET, certifique-se de usar o operador If e NOT a função IIf, que não funciona com objetos nulos. Então o XAML é:
fonte
Se você está procurando uma solução que não use IValueConverter, sempre pode usar o mecanismo abaixo
fonte
Conversor:
Obrigatório:
fonte
Você pode usar um conversor ou criar uma nova propriedade no seu ViewModel assim:
e use-o:
fonte