IEnumerable を受け取り、複数行の 1 つの文字列を返すコンバーターがあります。convertback 関数は逆のことを行い、複数行の文字列を受け取り、List を返します。いくつかの場所で使用していますが、うまく機能しています。
私の質問は、Convert 関数と ConvertBack 関数を逆に使用したい場所があることです (たとえば、OneWay バインディングでは、ConvertBack 関数を使用します)。これは XAML で可能ですか?
このようなコンバーターを作成することは可能です。たとえば、次のようになります。
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" />
できるかどうかはわかりませんが、できたとしてもそんなことはしません。
コンバーターは、バインドされた値をある値から別の値に変換するために使用されます。それを変更すると、WPF のコア機能の一部が変更されることになり、将来、他の開発者にとって非常に混乱することになります。
代わりに、逆変換を行う 2 つ目のコンバーターを作成します。
変換が非常に長い場合は、重複したコードを取り出して、コンバーター クラス ファイル内の独自のメソッドに配置し、両方のコンバーターでそのメソッドを呼び出すだけにすることがあります。