是否可以为内联绑定定义转换器(没有资源)?

Pom*_*oma 8 .net c# wpf xaml

是否可以为内联绑定定义类型转换器(没有资源)?

像这样的东西:

   <Button Visibility="{Binding ElementName=checkBox, Path=IsChecked, Converter={new BooleanToVisibilityConverter}" />
Run Code Online (Sandbox Code Playgroud)

sel*_*dog 8

您可以通过自定义创建和公开您的转换器MarkupExtension,它将为您提供您正在寻找的内联声明:

public class BooleanToVisibilityConverterExtension : MarkupExtension, IValueConverter
{
  private BooleanToVisibilityConverter converter;

  public BooleanToVisibilityCoverterExtension() : base()
  {
    this.converter = new BooleanToVisibilityConverter();
  }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    return this;
  }

  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    return this.converter.Convert(value, targetType, parameter, culture);
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
    return this.converter.ConvertBack(value, targetType, parameter, culture);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用MarkupExtension内联来创建新的转换器:

<Button Visibility="{Binding Converter={local:BooleanToVisibilityConverter} ...}" .. />
Run Code Online (Sandbox Code Playgroud)


Pop*_*lin 7

使用绑定语法是不可能的.但是可以使用元素语法:

 <Button.Visibility>
    <Binding ElementName="checkBox" Path=IsChecked>
        <Binding.Converter>
            <BooleanToVisibilityConverter />
        </Binding.Converter>
    </Binding>
 </Button.Visibility>
Run Code Online (Sandbox Code Playgroud)

但是你为什么要这样做呢?这意味着每个绑定实例都将创建一个新的转换器.从内存的角度来看,这并不高效.