1

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

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

在另一种情况下,我想以相同的方式将 NullableDecimal 转换为 String ...

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

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

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

4

2 回答 2

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>
于 2013-11-11T21:50:23.077 回答
0

我不确定您在功能方面的目标是什么,但是您是否考虑过扩展 String 的扩展方法?然后,您可以在视图模型中的 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;
    }
 }
于 2013-11-11T21:51:32.373 回答