【问题标题】:How to call/use a value converter inverted如何调用/使用反转的值转换器
【发布时间】:2013-11-23 20:26:04
【问题描述】:

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

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

在另一种情况下,我想以同样的方式将 NullableDecimal 转换为字符串...

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

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

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

【问题讨论】:

  • 你其实并不需要使用ConverterParameter,只需要检查转换器中的目标和源类型,然后决定使用哪种转换。
  • 您是否考虑过在这种情况下使用DataTriggers 作为转换器的替代品?
  • sa_ddam213:这是个好主意。谢谢! Rachel:它适用于这种情况。但这只是我想以“错误”方式使用转换器的一个例子。

标签: .net wpf binding converter ivalueconverter


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我不确定您在功能方面的目标是什么,但您是否考虑过扩展 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;
        }
     }
    

    【讨论】:

    • 这是一种可能性,但不适用于我正在开发的应用程序。我不允许更改 VM 中的属性。
    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2018-01-30
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多