使用一行语法中的参数绑定转换器
Posted
技术标签:
【中文标题】使用一行语法中的参数绑定转换器【英文标题】:Binding Converter with paramater in one line syntax 【发布时间】:2020-08-24 20:49:10 【问题描述】:我基本上试图在一行/标签中制定以下绑定条件:
<Rectangle.Fill>
<Binding Path="Contents.Value">
<Binding.Converter>
<localVM:SquareConverter Empty="White" Filled="Black" Unknown="Gray"/>
</Binding.Converter>
</Binding>
</Rectangle.Fill>
我似乎无法弄清楚如何指定上面的参数Empty="white" Filled="Black" Unkown="gray"
到目前为止我所拥有的:
<Button Background="Binding Path=Contents.Value, Converter=StaticResource localVM:SquareConverter, ConverterParameter= ">
我认为资源很好,现在我不知道如何指定语法正确的参数?
附:不用担心上下文,按钮背景通过控件模板等映射到矩形填充。
【问题讨论】:
Empty
、Filled
和 Unknown
属性从何而来?它是转换器的一部分吗?在您的问题中分享它是有意义的
您可以将converer声明为资源并通过StaticResource表达式引用它。但是,如果您需要为每个 Binding 提供单独的转换器实例,那将没有多大意义。
@PavelAnikhouski 是的,抱歉,它们是转换器的一部分,所以如果值为 Empty,则将背景转换为白色等,但 Clemens 评论成功了
【参考方案1】:
您可能已经注意到,您可以传递给 Converter 的参数数量仅为 1。您可以传递一个字符串数组或其他任何内容,但我相信将所有参数放在一个字符串中会更容易编写和处理。例如:"Empty=White|Filled=Black|Unknown=Gray"
您的转换器应如下所示:
public class SquareConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
if (value is string arg && parameter is string str)
string[] splits = str.Split("|"); // split by the delimiter
var colorConverter = new ColorConverter(); // required to convert invariant string to color
foreach (var kv in splits)
if(kv.StartsWith(arg, StringComparison.OrdinalIgnoreCase))
var v = kv.Split("=")[1]; // get the value from key-value
var color = (Color)colorConverter.ConvertFromInvariantString(v); // convert string to color
var brush = new SolidColorBrush(color); // convert color to solid color brush
return brush;
return default;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
throw new NotImplementedException();
在您的 xaml 中
xmlns:c="clr-namespace:WpfApp.Converters"
<Window.Resources>
<c:SquareConverter x:Key="SquareConverter"/>
</Window.Resources>
<Rectangle Fill="Binding Path=Contents.Value,
Converter=StaticResource SquareConverter,
ConverterParameter='Empty=White|Filled=Black|Unknown=Gray'"/>
【讨论】:
哦,好的,这让我有了更多的见识,拓宽了我能做的事情,感谢您的时间以上是关于使用一行语法中的参数绑定转换器的主要内容,如果未能解决你的问题,请参考以下文章
阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_1 请求参数绑定入门
PHP PostgreSQL PDO 无法使用 LIKE 绑定参数