标记扩展与 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;
        }
    }