是否可以在 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'}}"/>
是否可以在 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'}}"/>