是否有可能以“错误”的方式使用转换器? 换句话说:我可以交换源和目标吗?
这是一个例子:
我创建了一个名为IValueConverter
的简单NullableDecimalToStringConverter
,它将输入“NULL”转换为null,将数字转换为十进制。
我用它来将我的WPF视图中的TextBox绑定到小数?我的ViewModel中的属性。
在另一个上下文中,我想以同样的方式将NullableDecimal转换为String ...
是否可以简单地使用现有的NullableDecimalToStringConverter
倒置?
一种方法是使用转换器的参数告诉转换器它应该转换的方式。
但是有没有.NET构建方式来做这样的事情?
另一种方法是使用两种转换方法构建一个基类,并使用两个单独的转换器来调用基类方法......
答案 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;
}
}