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}}”