2

我有一个转换器,它接收一个 IEnumerable 并返回一个包含多行的字符串。convertback 函数则相反,它接收一个包含多行的字符串并返回一个列表。我在几个地方使用它,效果很好。

我的问题是,我现在有我想反向使用 Convert 和 ConvertBack 函数的位置(例如,在 OneWay 绑定中,它使用 ConvertBack 函数) 这在 XAML 中是否可行?

4

2 回答 2

3

我不知道这是否可能,但即使可能,我也不会做这样的事情。

转换器用于将绑定值从一个值转换为另一个值,如果您更改它,那么您将更改 WPF 中的部分核心功能,这将使其他开发人员在未来非常困惑。

相反,我只会制作第二个转换器,为您进行反向转换。

如果转换时间很长,我有时会把重复的代码拉出来放在转换器类文件中自己的方法中,让两个转换器都调用那个方法。

于 2012-10-29T15:40:24.250 回答
3

创建这样的转换器是可能的,例如:

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" />
于 2012-10-29T15:50:39.027 回答