WPF: Konwertery w XAMLu
Na codeplex jest świetny projekt autorstwa Kenta Boogarta pozwalający na definiowane converterów w XAMLu.
Na przykład gdy chcielibyśmy podłączyć Visibility do stringa( wartości Tak lub Nie ) można by napisać:
<Label Content="Test123">
<Label.IsVisible>
<Binding Path="MaBycWidocznyTekstowo">
<Binding.Converter>
<con:MapConverter>
<con:Mapping From="TAK" To="{x:Static Visibility.Visible}"/>
<con:Mapping From="NIE" To="{x:Static Visibility.Collapsed}""/>
</con:MapConverter>
</Binding.Converter>
</Binding>
</Label.IsVisible>
</Label>
Może być jeszcze ciekawiej, bo w ExpressionConverter można stosować wyrażenia logiczne dla MultiBinding:
<MultiBinding>
<MultiBinding.Converter>
<con:ExpressionConverterExtension>
<con:ExpressionConverterExtension.Expression>
<![CDATA[
{0} && {1} && {3} && !{2}
]]>
</con:ExpressionConverterExtension.Expression>
</con:ExpressionConverterExtension>
</MultiBinding.Converter>
<Binding Path="IsChecked" ElementName="_rammstein"/>
<Binding Path="IsChecked" ElementName="_powderfinger"/>
<Binding Path="IsChecked" ElementName="_nickelback"/>
<Binding Path="IsChecked" ElementName="_ministry"/>
</MultiBinding>
Jedyny trick, z którego warto sobie zdawać sprawę to w pewnych okolicznościach multibinding z ExpressionConverterem może zwrócić wyjątek w trybie design w visual studio. Nie można wtedy już nic zrobić wizualnie, warto wtedy sprawdzić czy na każdym z bindingów jest ustawiona odpowiednia wartość FallbackValue.
Strona projektu wpf-converters