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

Posted

技术标签:

【中文标题】是否可以在 WPF 的 MultiBinding QuickConverter 中使用带有参数的经典转换器?【英文标题】:Is it possible to use classical converter with parameters in MultiBinding QuickConverter in WPF? 【发布时间】:2020-09-18 10:39:46 【问题描述】:

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

更清楚的是,我想绑定 TextBlock 的 Text 属性以显示如下文本:

<MyApplication> + ' v' + <1.0>

MyApplication 来自字符串资源 Resources.String2251.0 可能来自 IValueConverter 类类型,我可以将参数 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. '

我是正确的还是不可能做到的?

感谢您的关注。

【问题讨论】:

查看How to bind multiple values to a single WPF TextBlock? 谢谢,但@neelesh bodgal,我正在使用QuickConverter 库github.com/JohannesMoersch/QuickConverter,我会用这个库来做。 【参考方案1】:

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

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

【讨论】:

以上是关于是否可以在 WPF 的 MultiBinding QuickConverter 中使用带有参数的经典转换器?的主要内容,如果未能解决你的问题,请参考以下文章

WPF MultiBinding 和 IMultiValueConverter 进行布尔运算

WPF Multibinding - 需要使用 Relaycommand

WPF 多值绑定(MultiBinding)与多属性触发器(MultiTrigger)与多数据触发器(MultiDataTrigger)

WPF BINDING

为啥 MultiBinding 不适用于 CornerRadius

WPF 让一组 Button 实现 RadioButton 的当前样式效果