问题
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?
回答1:
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.CurrencyConverterXceed.Wpf.DataGrid.Converters.DateTimeToStringConverterXceed.Wpf.DataGrid.Converters.GreaterThanZeroConverterXceed.Wpf.DataGrid.Converters.IndexToOddConverterXceed.Wpf.DataGrid.Converters.IntAdditionConverterXceed.Wpf.DataGrid.Converters.InverseBooleanConverterXceed.Wpf.DataGrid.Converters.LevelToOpacityConverterXceed.Wpf.DataGrid.Converters.MultimodalResultConverterXceed.Wpf.DataGrid.Converters.NegativeDoubleConverterXceed.Wpf.DataGrid.Converters.NullToBooleanConverterXceed.Wpf.DataGrid.Converters.SourceDataConverterXceed.Wpf.DataGrid.Converters.StringFormatConverterXceed.Wpf.DataGrid.Converters.ThicknessConverterXceed.Wpf.DataGrid.Converters.TypeToBooleanConverterXceed.Wpf.DataGrid.Converters.TypeToVisibilityConverterXceed.Wpf.DataGrid.Converters.ValueToMaskedTextConverter
Derived from IMultiValueConverter:
System.Windows.Controls.BorderGapMaskConverter
System.Windows.Navigation.JournalEntryUnifiedViewConverter
System.Windows.Controls.MenuScrollingVisibilityConverterMicrosoft.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.
回答2:
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>
来源:https://stackoverflow.com/questions/505397/built-in-wpf-ivalueconverters