C# 有没有办法避免对过分简单的WPF/XAML转换器的需求?

C# 有没有办法避免对过分简单的WPF/XAML转换器的需求?,c#,wpf,xaml,converter,C#,Wpf,Xaml,Converter,我今天(显然又一次)突然需要这个。幸运的是,我已经为此编写了代码: public class BooleanInverterConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) { return !((bool)value);

我今天(显然又一次)突然需要这个。幸运的是,我已经为此编写了代码:

public class BooleanInverterConverter : IValueConverter 
{
    public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) 
   { 
      return !((bool)value); 
   }
    public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) 
    {
        throw new NotImplementedException( );
    }
}
我也注意到我自己对它的评论,这让我咯咯地笑了起来-

//Seriously? Kill me...

然而,它提出了一个有效的观点,并引出了我的问题-这类事情是绝对必要的吗?

对于布尔转换器,它是由系统在控件命名空间中提供的,因此不必创建自己的转换器。看


此外,如果您不需要转换器…只需在VM上放置一个属性,该属性将返回可见性

public Visibility ShouldTheButtonBeShown 
  { 
     get { return isValid ? Visbility.Visible : Visibility.Hidden; }
  }

仅供参考,为了使事情更简单,避免将转换器声明为静态实例如何

为了实现这一点,可以为任何转换器创建基类,将其初始化为单例。这将允许用户跳过在页面资源中将其定义为静态实例的步骤

我在我的博客上描述了它


使用触发器几乎可以完全避免转换器。现在我所有的XAML都使用触发器。转换器很难使用…所以我只在有一些半复杂的多值逻辑时才使用它们。

这是干什么用的?切换按钮?您已经可以通过模型中的属性反转值。您不应该在
ConvertBack
中抛出
notimplementedexception
,根据上的MSDN页面,如果您无法转换回,您应该返回
DependencyProperty.UnsetValue
Binding。根据您是否希望依赖转换器的内容返回到
Binding.FallbackValue
或不返回。对不起,我不是直接指可见性;我指的是like value=!在这种情况下的价值,特别是;如果我的评论有点误导,很抱歉。好的,谢谢。我将把它作为处理这些愚蠢的转换器的理想选择…我在一个共享库中有一堆这样的转换器。对于简单的,我甚至可以通过声明一个静态
实例
属性来避免在参考资料中定义它们。通过这种方式,您可以编写类似于
IsReadOnly=“{Binding CanModify,Converter={x:Static shared:booleanInvertorConverter.Instance}}”