有什么办法可以避免对过于简单的 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 都使用触发器。转换器很难用...所以我只在我有一些半复杂的多值逻辑时才使用它们。
我 运行 今天(显然又)需要这个。幸运的是我已经为它编码了:
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 都使用触发器。转换器很难用...所以我只在我有一些半复杂的多值逻辑时才使用它们。