WPF中的多重绑定用于布尔转换器

时间:2017-06-16 13:00:12

标签: c# wpf combobox binding

我正在开发一个需要检查一些可用性属性的小应用程序。我正在使用用户界面WPF。如果从组合框中选择,我需要更改一些前景色。我有这个DataTemplate:

<DataTemplate x:Key="userTemplate">
<TextBlock VerticalAlignment="Center">
    <Image Source="imgsource.png" Height="25" Width="25" />
    <Run Text="{Binding BooleanObjectName}" Foreground="{Binding boolobject, Converter={StaticResource convAvailability}}"/>
</TextBlock>

所以我正在使用这个转换IValueConverter将颜色设置为前景:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    BooleanObject boolobject = (BooleanObject)value;
    if (boolobject.IsBoolValueOne) return System.Drawing.Brushes.Green;
    else if (boolobject.IsBoolValueTwo) return System.Drawing.Brushes.Red;
    else if (boolobject.IsBoolValueThree) return (SolidColorBrush)(new BrushConverter().ConvertFrom("#d3d300"));
    else return System.Drawing.Brushes.Black;
}

这有什么问题,因为在我的界面中,我总是得到黑色。有什么想法吗?

非常感谢任何帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

正如@Funk指出的那样,你会返回错误的画笔。您应该返回System.Windows.Media.Brush对象:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    BooleanObject boolobject = (BooleanObject)value;
    if (boolobject.IsBoolValueOne)
        return System.Windows.Media.Brushes.Green;
    else if (boolobject.IsBoolValueTwo)
        return System.Windows.Media.Brushes.Red;
    else if (boolobject.IsBoolValueThree)
        return (SolidColorBrush)(new BrushConverter().ConvertFrom("#d3d300"));

    return System.Windows.Media.Brushes.Black;
}

如果您对boolobject属性的绑定确实有效,那么它应该可以工作。否则你的转换器根本不会被调用。

如果要绑定到对象本身,则应指定路径“。”:

<TextBlock VerticalAlignment="Center">
    <Image Source="imgsource.png" Height="25" Width="25" />
    <Run Text="{Binding BooleanObjectName}" Foreground="{Binding Path=., Converter={StaticResource convAvailability}}"/>
</TextBlock>