Usuário com melhor resposta
Possuir o inverso da propriedade já existente

Pergunta
-
Possuo duas caixas na tela. Só uma delas pode aparecer de cada vez, então quando o usuário marca uma propriedade como true aparece uma caixa, se ele desmarca tem que aparecer outra.
Fiz um converter de booleano para visibilty e a primeira caixa ficou certo. Quando marca, a primeira caixa aparece. Agora eu queria fazer o inverso disso. O problema de criar um Propriedade1Marcada e Propriedade1Desmarcada é que preciso ficar disparando os dois propertychanged para notificar o XAML da alteração. Não existe um jeito mais prático de fazer isso?
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
Respostas
-
Crie um converter que faz o inverso - se for True, volta a visibilidade Collapsed e use a mesma propriedade nas duas caixas, cada um com o seu converter.
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Marcado como Resposta LeandrodeMelloFagundes terça-feira, 2 de fevereiro de 2010 13:40
-
Bruno, na verdade essa foi a primeira resposta que me veio em mente mas:
O conversor é algo meio padrão para várias telas. Estou criando eles em um projeto tipo Core que guarda diversas coisas diferentes, inclusive os conversores que podem ser utilizados em qualquer lugar.
Quando eu falo que tenho um conversor de bool para visibility, ter um outro conversor implicaria em um pouco de confusão na nomenclatura, certo? InverseVisibilitToBooleanConverter? Estranho.
Eu fiquei pensando um pouco e lembrei em outro tópico meu você ensinou sobre o CommandParameter. Então eu juntei o útil com agradável e ficou assim:
No método de Conversão dentro do Converter eu pego e verifico:
//verifico primeiro o parâmetro if (parameter != null && parameter.ToString().Equals("false")) {//se o parâmetro !NÃO é nulo (foi passado algum valor) e o parâmetro é FALSO (valor booleano false) parameter = (bool)value == false;//ele inverte o valor } else {//se o parâmetro é NULL ou se o parâmetro não é falso parameter = (bool)value == true;//mantenho o valor passado } //verifico se o valor é true if ((bool)parameter) {//se for return Visibility.Visible;//retorno visível } else {//se não for return Visibility.Collapsed;//retorno collapsed }
Desse jeito, bastou utilizar o Converter normal (sem parâmetro) quando vou usar normalmente ou passar um CommandParameter = false quando quero inverter o valor da propriedade!
Não sei se é muito recomendado isso, mas achei inteligente e produtivo!
mesmo assim, obrigado pela ajuda
;)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)- Marcado como Resposta LeandrodeMelloFagundes terça-feira, 2 de fevereiro de 2010 13:40
Todas as Respostas
-
Crie um converter que faz o inverso - se for True, volta a visibilidade Collapsed e use a mesma propriedade nas duas caixas, cada um com o seu converter.
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Marcado como Resposta LeandrodeMelloFagundes terça-feira, 2 de fevereiro de 2010 13:40
-
Bruno, na verdade essa foi a primeira resposta que me veio em mente mas:
O conversor é algo meio padrão para várias telas. Estou criando eles em um projeto tipo Core que guarda diversas coisas diferentes, inclusive os conversores que podem ser utilizados em qualquer lugar.
Quando eu falo que tenho um conversor de bool para visibility, ter um outro conversor implicaria em um pouco de confusão na nomenclatura, certo? InverseVisibilitToBooleanConverter? Estranho.
Eu fiquei pensando um pouco e lembrei em outro tópico meu você ensinou sobre o CommandParameter. Então eu juntei o útil com agradável e ficou assim:
No método de Conversão dentro do Converter eu pego e verifico:
//verifico primeiro o parâmetro if (parameter != null && parameter.ToString().Equals("false")) {//se o parâmetro !NÃO é nulo (foi passado algum valor) e o parâmetro é FALSO (valor booleano false) parameter = (bool)value == false;//ele inverte o valor } else {//se o parâmetro é NULL ou se o parâmetro não é falso parameter = (bool)value == true;//mantenho o valor passado } //verifico se o valor é true if ((bool)parameter) {//se for return Visibility.Visible;//retorno visível } else {//se não for return Visibility.Collapsed;//retorno collapsed }
Desse jeito, bastou utilizar o Converter normal (sem parâmetro) quando vou usar normalmente ou passar um CommandParameter = false quando quero inverter o valor da propriedade!
Não sei se é muito recomendado isso, mas achei inteligente e produtivo!
mesmo assim, obrigado pela ajuda
;)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)- Marcado como Resposta LeandrodeMelloFagundes terça-feira, 2 de fevereiro de 2010 13:40