Built-in WPF IValueConverters
WpfConvertersWpf Problem Overview
Ok, it was a nice surprise (after writing it several times) to find that there already is a BooleanToVisibilityConverter in System.Windows.Controls namespace.
Probably there are more such hidden time-savers.
Anyone got some?
Wpf Solutions
Solution 1 - Wpf
I did a quick trawl using the Object Browser and this is what I have.
Derived from IValueConverter
:
> System.Windows.Controls.AlternationConverter
> System.Windows.Controls.BooleanToVisibilityConverter
> System.Windows.Documents.ZoomPercentageConverter
> System.Windows.Navigation.JournalEntryListConverter
>
> Xceed.Wpf.DataGrid.Converters.CurrencyConverter
> Xceed.Wpf.DataGrid.Converters.DateTimeToStringConverter
> Xceed.Wpf.DataGrid.Converters.GreaterThanZeroConverter
> Xceed.Wpf.DataGrid.Converters.IndexToOddConverter
> Xceed.Wpf.DataGrid.Converters.IntAdditionConverter
> Xceed.Wpf.DataGrid.Converters.InverseBooleanConverter
> Xceed.Wpf.DataGrid.Converters.LevelToOpacityConverter
> Xceed.Wpf.DataGrid.Converters.MultimodalResultConverter
> Xceed.Wpf.DataGrid.Converters.NegativeDoubleConverter
> Xceed.Wpf.DataGrid.Converters.NullToBooleanConverter
> Xceed.Wpf.DataGrid.Converters.SourceDataConverter
> Xceed.Wpf.DataGrid.Converters.StringFormatConverter
> Xceed.Wpf.DataGrid.Converters.ThicknessConverter
> Xceed.Wpf.DataGrid.Converters.TypeToBooleanConverter
> Xceed.Wpf.DataGrid.Converters.TypeToVisibilityConverter
> Xceed.Wpf.DataGrid.Converters.ValueToMaskedTextConverter
Derived from IMultiValueConverter
:
> System.Windows.Controls.BorderGapMaskConverter
> System.Windows.Navigation.JournalEntryUnifiedViewConverter
> System.Windows.Controls.MenuScrollingVisibilityConverter
>
> Microsoft.Windows.Themes.ProgressBarBrushConverter
> Microsoft.Windows.Themes.ProgressBarHighlightConverter
Note the Xceed ones (no connection) are available free with their DataGrid. As well as those there's some clever stuff around like the debugging converter. I've also used the last IValueConverter and I'm sure there's some further lambda function goodness to be found, too.
Solution 2 - Wpf
Before 3.5 SP1, an IValueConverter was required for string formatting. Now, you can use the StringFormat property on Binding to do this.
From the MSDN page:
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} -- Now only {1:C}!">
<Binding Path="Description"/>
<Binding Path="Price"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>