2013-08-20 6 views
17

मेरे पास एक कक्षा है जो IValueConverter लागू करती है जिसका उपयोग एक बूलियन मान को Brush में परिवर्तित करने के लिए किया जाता है। मैं एक Border कंट्रोल BorderBrush संपत्ति के लिए एक बाध्यकारी में IValueConverter उपयोग करने के लिए कोशिश कर रहा हूँ:क्या आप सीमावर्ती संपत्ति पर बाध्यकारी में एक IValueConverter का उपयोग कर सकते हैं?

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); } 
} 

जब मैं संकलन:

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

यहाँ के पीछे कोड में डोमेन संपत्ति के लिए कोड है

The TypeConverter for "IValueConverter" does not support converting from a string. 

यहाँ 01 के लिए कोड है: कोड है, जो किसी भी तरह से समाप्त हो गया है, मैं BorderBrush पर एक संकलक त्रुटि बंधन मिल:

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)) { } 
} 

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

उत्तर

55

आप अपने कनवर्टर

उदाहरण का उपयोग करने के StaticResource उपयोग करने की आवश्यकता:

<Border BorderBrush="{Binding IsSelected, Converter={StaticResource BrushConverter}}"> 
+1

मैं जानता था !!! धन्यवाद! –

+0

ओह वाह। मैं अब बेवकूफ महसूस करता हूँ। धन्यवाद @ sa_ddam213, आपने मेरा दिन बनाया! :-) – BrainSlugs83

+0

मुझे बिल्कुल दो टिप्पणियों की तरह लगता है और वह भी एक ही समय में। –

संबंधित मुद्दे

 संबंधित मुद्दे