是否可以在 WPF 的 MultiBinding QuickConverter 中使用带有参数的经典转换器?

Is it possible to use classical converter with parameters in MultiBinding QuickConverter in WPF?

是否可以在 WPF 中使用带有 QuickConverter MultiBinding 参数的 classical 转换器?

更清楚的是,我想绑定 TextBlock 的 Text 属性 来显示这样的文本:

<MyApplication> + ' v' + <1.0>

MyApplication 来自字符串资源 Resources.String225 并且 1.0 可能来自 IValueConverter class 类型,我可以将参数 myParameter。 我尝试了下面的 XAML 代码,

<TextBlock Text="{qc:MultiBinding '$V0 + \' v\' + $V1',
 V0={x:Static resx:Resources.String225},
 V1={Binding Converter={StaticResource ProgramVersionConverter}, ConverterParameter='myParameter'}}"/>

使用以下转换器:

public class ProgramVersionConverter : IValueConverter
{
    public static Func<string, string> GetApplicationExeVersion;

    /// <summary>
    /// Returns version of the executable
    /// </summary>
    /// <param name="value"></param>
    /// <param name="targetType"></param>
    /// <param name="parameter"></param>
    /// <param name="culture"></param>
    /// <returns></returns>
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return GetApplicationExeVersion?.Invoke((string)parameter);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException("ProgramVersion converter ConvertBack not supported.");
    }
}

GetApplicationExeVersion 被设置为另一部分代码中的方法,那里不需要。

但是我在运行时遇到了这个异常:

System.Windows.Markup.XamlParseException:
'Unable to set' Binding 'on property' V1 'of type' MultiBinding '.
A 'Binding' can only be defined on a DependencyProperty of a DependencyObject. '

我做的对不对?

感谢您的关注。

当然可以。
如果您想添加一个值作为 System.Windows.Data.Binding(或 System.Windows.Data.MultiBinding 等)的结果,您必须使用 P0...P9 属性之一QuickConverter.MultiBinding,因为它们 接受绑定表达式。 V0...V9 属性 接受常量值,无绑定表达式。

<TextBlock Text="{qc:MultiBinding '$V0 + \' v\' + $P0',
 V0={x:Static resx:Resources.String225},
 P0={Binding Converter={StaticResource ProgramVersionConverter}, ConverterParameter='myParameter'}}"/>