[英]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.