簡體   English   中英

多個綁定作為轉換器WPF MVVM的參數

[英]Multiple bindings as parameter for converter WPF MVVM

我正在嘗試更改橢圓的填充筆刷。 它沒有用,所以作為快速解決方案,我做了一些體力勞動:

<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接口。 例如,您有2個按鈕將確定ellipse顏色。 因此,您可以對轉換器進行編碼,使其看起來像這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM