在一行语法中使用参数绑定转换器
Binding Converter with paramater in one line syntax
我基本上是想在一个 line/tag 中制定以下绑定条件:
<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={ }}">
我认为资源很好,现在我找不到如何在语法上正确指定参数?
P.S。不用担心上下文,按钮背景通过控件模板等映射到矩形填充。
您可能已经注意到,您可以传递给 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'}"/>
我基本上是想在一个 line/tag 中制定以下绑定条件:
<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={ }}">
我认为资源很好,现在我找不到如何在语法上正确指定参数?
P.S。不用担心上下文,按钮背景通过控件模板等映射到矩形填充。
您可能已经注意到,您可以传递给 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'}"/>