是否可以在 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.String225
和 1.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.MultiBinding
的P0
...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)