我有一个转换器,它接收一个 IEnumerable 并返回一个包含多行的字符串。convertback 函数则相反,它接收一个包含多行的字符串并返回一个列表。我在几个地方使用它,效果很好。
我的问题是,我现在有我想反向使用 Convert 和 ConvertBack 函数的位置(例如,在 OneWay 绑定中,它使用 ConvertBack 函数) 这在 XAML 中是否可行?
我不知道这是否可能,但即使可能,我也不会做这样的事情。
转换器用于将绑定值从一个值转换为另一个值,如果您更改它,那么您将更改 WPF 中的部分核心功能,这将使其他开发人员在未来非常困惑。
相反,我只会制作第二个转换器,为您进行反向转换。
如果转换时间很长,我有时会把重复的代码拉出来放在转换器类文件中自己的方法中,让两个转换器都调用那个方法。
创建这样的转换器是可能的,例如:
class ListStringConverter : IValueConverter
{
public bool IsListToString { get; set; }
public ListStringConverter()
{
IsListToString = true;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return IsListToString ? FromListToString(value) : FromStringToList(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return IsListToString ? FromStringToList(targetListItem) : FromListToString(targetListItem);
}
public object FromListToString(object list)
{
.... // Conversion Logic
}
public object FromStringToList(object myString)
{
.... // Conversion Logic
}
}
在 XAML 中,您可以像这样声明它
<ListStringConverter x:Key="StringToListConverter " IsListToString ="False" />