Eu tenho uma situação em que preciso mostrar um valor inteiro, vinculado a uma propriedade no meu contexto de dados, depois de colocá-lo em duas conversões separadas:
- Inverta o valor dentro de um intervalo (por exemplo, o intervalo é de 1 a 100; o valor no datacontext é 90; o usuário vê o valor 10)
- converter o número em uma string
Sei que poderia executar as duas etapas criando meu próprio conversor (que implementa o IValueConverter). No entanto, eu já tenho um conversor de valores separado que executa apenas o primeiro passo e o segundo passo é coberto pelo Int32Converter.
Existe uma maneira de encadear essas duas classes existentes no XAML sem precisar criar outra classe que as agregue?
Se precisar esclarecer alguma coisa, entre em contato. :)
Obrigado.
wpf
data-binding
xaml
ivalueconverter
Mal Ross
fonte
fonte
return this.Reverse<IValueConverter>().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));
Encontrei exatamente o que estava procurando, cortesia de Josh Smith: Piping Value Converters (link archive.org) .
Ele define uma
ValueConverterGroup
classe, cujo uso em XAML é exatamente o que eu esperava. Aqui está um exemplo:Coisas boas. Obrigado Josh. :)
fonte
A implementação de Town do projeto Silverlight de Gareth Evans é excelente, no entanto, não suporta parâmetros de conversor diferentes.
Eu o modifiquei para que você possa fornecer parâmetros, delimitados por vírgulas (a menos que você escape deles, é claro).
Conversor:
Nota: ConvertBack não está implementado aqui, veja meu Gist para a versão completa.
Implementação:
fonte
Sim, existem maneiras de encadear conversores, mas ele não parece bonito e você não precisa dele aqui. Se você precisar disso, pergunte a si mesmo: esse é realmente o caminho a seguir? Simples sempre funciona melhor, mesmo se você tiver que escrever seu próprio conversor.
No seu caso específico, tudo o que você precisa fazer é formatar um valor convertido em uma sequência.
StringFormat
propriedade em umBinding
é seu amigo aqui.fonte
Aqui está uma pequena extensão da resposta da Town para apoiar a ligação múltipla:
fonte