C# 多个绑定作为转换器WPF MVVM的参数
我正在尝试更改椭圆的填充笔刷。它不起作用,所以作为一个快速修复,我做了一些体力劳动:C# 多个绑定作为转换器WPF MVVM的参数,c#,wpf,data-binding,ivalueconverter,C#,Wpf,Data Binding,Ivalueconverter,我正在尝试更改椭圆的填充笔刷。它不起作用,所以作为一个快速修复,我做了一些体力劳动: <Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="DarkGray" Visibility="{Binding Model.TransitLow, Converter={StaticResource BoolToVisibilityConverter}}"/> <Ellipse Height="55" Wid
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="DarkGray"
Visibility="{Binding Model.TransitLow, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="White"
Visibility="{Binding Model.IndicationHigh, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="DarkGray"
Visibility="{Binding Model.IndicationLow, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="White"
Visibility="{Binding Model.High, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="DarkGray"
Visibility="{Binding Model.Low, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="Red"
Visibility="{Binding Model.FeedbackError, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="Red"
Visibility="{Binding Model.FunctionFailed, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="Red"
Visibility="{Binding Model.LossOfXE, Converter={StaticResource BoolToVisibilityConverter}}"/>
正如你们所看到的,我基本上只是创建了图层,并使用了隐藏和显示算法
理想情况下,所有这些绑定属性都将进入一个转换器,执行逻辑并为一个椭圆返回一个笔刷
理想情况下,我想要这样的东西:
<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="{Binding Model.LossOfXE,Model.FunctionFailed....... Converter={StaticResource attrsToBrushConverter}}"/>
假设椭圆的颜色因多种情况而改变,您可以使用
IMultiValueConverter
界面。例如,您有两个按钮,用于确定椭圆的颜色。所以你可以把你的转换器编码成这样
public class EllipseColorConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
bool btn1 = (bool)values[0];
bool btn2 = (bool)values[1];
if (btn1 && !btn2)
return Brushes.Red;
else if (btn2 && !btn1)
return Brushes.Blue;
else if (btn1 && btn2)
return Brushes.Pink;
else
return Brushes.Black;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在xaml
中可以实现
<Window.Resources>
<local:EllipseColorConverter x:Key="ellipseColorConvert"/>
</Window.Resources>
<Ellipse Grid.Row="0" Width="100" Height="100">
<Ellipse.Fill>
<MultiBinding Converter="{StaticResource ellipseColorConvert}">
<Binding ElementName="btn1" Path="IsPressed"/>
<Binding ElementName="btn2" Path="IsPressed"/>
</MultiBinding>
</Ellipse.Fill>
</Ellipse>
<Button Grid.Row="1" Content="button 1" x:Name="btn1"/>
<Button Grid.Row="2" Content="button 2" x:Name="btn2"/>
我对WPF的了解并不深刻,但我认为您正在寻找的是一个多值转换器。您所说的“填充椭圆刷”是什么意思??我认为理想情况下,您不想拥有图层,也不想向椭圆发送可用颜色的列表。您可能需要一些其他类型的控件来告诉代码隐藏更改和更新ellipseI没有代码隐藏,这就是重点。我的意思是填充画笔,用来填充椭圆的画笔。你应该这样做。萨金特先生有个好线索给你