如何调用/使用值转换器

时间:2013-11-11 21:38:32

标签: .net wpf binding converter ivalueconverter

是否有可能以“错误”的方式使用转换器? 换句话说:我可以交换源和目标吗?

这是一个例子: 我创建了一个名为IValueConverter的简单NullableDecimalToStringConverter,它将输入“NULL”转换为null,将数字转换为十进制。 我用它来将我的WPF视图中的TextBox绑定到小数?我的ViewModel中的属性。

在另一个上下文中,我想以同样的方式将NullableDecimal转换为String ...

是否可以简单地使用现有的NullableDecimalToStringConverter倒置? 一种方法是使用转换器的参数告诉转换器它应该转换的方式。

但是有没有.NET构建方式来做这样的事情?

另一种方法是使用两种转换方法构建一个基类,并使用两个单独的转换器来调用基类方法......

2 个答案:

答案 0 :(得分:3)

您可以创建一个反转方向的转换器,例如:

[ContentProperty("Converter")]
public class ReverseConverter : IValueConverter
{
    public IValueConverter Converter { get; set; }

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

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

XAML中的用法如下所示:

<local:ReverseConverter>
    <!-- put the other converter here -->
</local:ReverseConverter>

答案 1 :(得分:0)

我不确定你在功能方面究竟要做什么,但是你考虑过一个扩展String的扩展方法吗?然后,您可以在viewmodel中的getter和setter上使用它(假设您正在使用MVVM)。这是我正在谈论的一个例子:

public static class Extensions
{
    public static decimal? ToSafeNullDecimal(this string value)
    {
        decimal? dec = null;
        if (string.IsNullOrWhiteSpace(value)) return null;
        decimal x;
        if (decimal.TryParse(value, out x))
            dec = x;
        return dec;
    }
 }