Ich habe eine Klasse, die IValueConverter
implementiert, die verwendet werden soll, um einen booleschen Wert in eine Brush
zu konvertieren. Ich versuche, die IValueConverter
in eine Bindung an die BorderBrush
Eigenschaft eines Border
Steuerung:Können Sie einen IValueConverter in einer Bindung für die BorderBrush-Eigenschaft verwenden?
<Window x:Class="DomPicker.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:CustomControls;assembly=CustomControls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
DataContext="{Binding Path=Domains, RelativeSource={RelativeSource Self}}"
Height="350"
Title="My Title"
Width="525">
<cc:CarSystemWindow.Resources>
<cc:BooleanToBrushConverter x:Key="BrushConverter" True="Black" False="Transparent" />
<DataTemplate x:Name="DomainTemplate" DataType="DomainViewModel">
<Border BorderBrush="{Binding Converter=BrushConverter, Path=IsSelected}">
. . .
</Border>
</DataTemplate>
</cc:CarSystemWindow.Resources>
<Grid>
<ListBox . . . Name="DomainListBox" />
</Grid>
<Window>
Hier ist der Code für die Domains Eigenschaft im Code hinter:
public static readonly DependencyProperty DomainsProperty =
DependencyProperty.Register("Domains", typeof(ObservableCollection<DomainViewModel>), typeof(MainWindow), new PropertyMetadata(null));
public ObservableCollection<DomainViewModel> Domains {
get { return (ObservableCollection<DomainViewModel>) GetValue(DomainsProperty); }
set { SetValue(DomainsProperty, value); }
}
Wenn ich kompilieren der Code, der durch kein Mittel ist fertig, bekomme ich einen Compiler-Fehler auf der BorderBrush
Bindung:
The TypeConverter for "IValueConverter" does not support converting from a string.
Hier ist der Code für die IValueConverter
:
public class BooleanConverter<T> : IValueConverter {
public T False { get; set; }
public T True { get; set; }
public BooleanConverter(T trueValue, T falseValue) {
// Set the values of True and false to the values we were passed.
True = trueValue;
False = falseValue;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return value is bool && ((bool) value) ? True : False;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
return value is T && EqualityComparer<T>.Default.Equals((T) value, True);
}
}
[ValueConversion(typeof(bool), typeof(Brush))]
public class BooleanToBrushConverter : BooleanConverter<Brush> {
/// <summary>
/// Set us up so we convert true to a Black <see cref="SolidColorBrush"/> and
/// false to a Red SolidColorBrush.
/// </summary>
public BooleanToBrushConverter() :
base(new SolidColorBrush(Colors.Black), new SolidColorBrush(Colors.Red)) { }
}
Kann mir jemand sagen, was ich falsch mache?
ich wusste, dass !!! Vielen Dank! –
Oh wow. Ich fühle mich jetzt dumm. Danke @ sa_ddam213, du hast meinen Tag gemacht! :-) – BrainSlugs83
Ich fühle mich genau wie oben zwei Kommentare und das auch gleichzeitig. –