WPF de ligação de dados e conversores
-
05-07-2019 - |
Pergunta
Eu estou tentando vincular a uma caixa de listagem assim:
<ListBox x:Name="MyListBox" Margin="0,0,0,65">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource MyConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
A razão que eu estou ligação a todo o objeto e não uma propriedade é porque meu conversor vai precisar de várias propriedades do objeto para construir a cadeia que ele retorna.
Isso funciona e minha string é retornado. Mas então, quando eu mudar o ObservableCollection que este é baseado no valor não é alterado na tela. Se eu ligar para apenas uma única propriedade e alterá-lo, então o valor será alterado.
O que eu posso fazer de diferente? Eu não pode vincular a uma única propriedade desde que eu preciso o objeto inteiro no conversor ... E o ConverterParameter já está sendo usado.
Solução
Lembre-se, se você ligar para a propriedade "principal" e o valor da própria propriedade principal não é alterado, a ligação não terá nenhuma razão para refrescar-se. Não tem nenhum indício de que o seu conversor é realmente baseado fora de uma sub-propriedade. O que você pode fazer é usar um MultiBinding onde se ligam não apenas a propriedade "principal", mas também uma sub-propriedade. Isto dá a seu IMultiValueConverter acesso implementação do objeto de dados principal, mas porque você também está de ligação à sub-propriedade que está mudando, também será atualizado quando o valor de mudanças de que sub-propriedade.
Outras dicas
Você pode tentar usar um MultiBinding que eu acredito que as atualizações sempre que qualquer de suas ligações são acionados. Você também pode usar um IMultiValueConverter ou apenas aproveitar o StringFormat da ligação.