c# - 多个绑定(bind)作为转换器 WPF MVVM 的参数

标签 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" 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}}"/>

如您所见,我基本上刚刚创建了图层,并使用了隐藏和显示算法。

理想情况下,所有这些绑定(bind)属性都将进入一个转换器来执行逻辑并为一个椭圆返回一个画笔。

理想情况下,我想要的是这样的:

<Ellipse Height="55" Width="55" Grid.Column="1" Grid.Row="1" Fill="{Binding Model.LossOfXE,Model.FunctionFailed....... Converter={StaticResource attrsToBrushConverter}}"/>   

最佳答案

假设椭圆的颜色因多种条件而变化,您可以使用 IMultiValueConverter 接口(interface)。例如,您有 2 个按钮可以确定椭圆的颜色。因此,您可以对转换器进行编码,使其看起来像这样

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"/>

关于c# - 多个绑定(bind)作为转换器 WPF MVVM 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119480/

相关文章:

c# - XAML 中的 WPF ListView 绑定(bind) ItemsSource

C# Dictionary<> 和可变键

c# - 将 XmlNodeList 转换为 XmlNode[]

c# - 在没有 Outlook 的情况下发送 Outlook session 请求?

c# - 如何删除所有 Click 事件处理程序?

c# - 有没有办法覆盖列表框中所有项目的颜色?

c# - 如果我使用 Task.Wait() 而不是等待,则不会显示 MessageDialog 任务

WPF 应用程序启动缓慢

wpf - XAML 有版本吗?

c# - Silverlight 3 和 IMultiValueConverter