标记扩展与 IValueConverter 一起使用
标记扩展的最佳用途之一是更容易使用 IValueConverter。在下面的示例中,BoolToVisibilityConverter 是一个值转换器,但由于它与实例无关,因此可以在没有标记扩展的帮助下使用值转换器的正常 hasles。在 XAML 中使用
Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"
并且你可以将项目可见性设置为 bool 值。
public class BoolToVisibilityConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Visibility)
{
if ((Visibility)value == Visibility.Visible)
return true;
else
return false;
}
else
return false;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}