有什么办法可以避免对过于简单的 WPF/XAML 转换器的需求?

Is there any way to avoid the need for absurdly simplistic WPF/XAML Converters?

我 运行 今天(显然又)需要这个。幸运的是我已经为它编码了:

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...

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

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

BooleanToVisibilityConverter Class (System.Windows.Controls)


此外,如果您不需要转换器...只需在 returns 可见性的 VM 上放置一个 属性。

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

仅供参考,进一步简化操作如何避免必须将转换器声明为静态实例?

为此,可以为任何转换器创建一个基础 class,并将其初始化为单例。这将允许人们跳过必须在页面资源上将其定义为它的静态实例。

我在我的博客上描述了它

Xaml: Call Binding Converter Without Defining StaticResource in Xaml Thanks to Markup Derived Base Class in C# « OmegaMan's Musings

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