2011-04-07 25 views
12

Quiero establecer el TextBlock en modo visible/contraído en función del valor encuadernado. No funciona y recibo este mensaje cuando quiero depurar mi aplicación:WPF: No se puede configurar el convertidor; error al iniciar la aplicación

Establecer propiedad 'System.Windows.Data.Binding.Converter' lanzó una excepción.

El valor que se binded es del tipo Uri. Hay un interior InvalidCastException que dice:

No se puede convertir objeto de tipo 'System.String' al tipo 'System.Windows.Data.IValueConverter'.

Aquí es mi divisa:

public class VisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     if (value is string && string.IsNullOrEmpty(value as string)) 
     { 
      return Visibility.Collapsed; 
     } 
     else if (value == null) 
     { 
      return Visibility.Collapsed; 
     } 
     else 
     { 
      return Visibility.Visible; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

Y aquí está el XAML que produce la excepción:

... 
<Page.Resources> 
    <converters:VisibilityConverter x:Key="visibilityConverter" /> 
</Page.Resources> 
... 
<TextBlock Visibility="{Path=UrlAddress, Converter=visibilityConverter}"> 
    This never works! 
</TextBlock> 
... 

Ayuda, por favor!

Respuesta

43

Trate incluir su convertidor como StaticResource

<TextBlock Visibility="{Path=UrlAddress, Converter={StaticResource visibilityConverter}}"> 
+0

Felicidades en una primera respuesta;) – Boris

+0

Thanks very helpful :) –

1

En caso de ser

<TextBlock Visibility="{Path=UrlAddress, Converter={StaticResource visibilityConverter}}">` 
1

olvidó mencionar Binding extensión de marcado con ElementName atribuir tal vez?

<TextBlock Visibility="{Binding ElementName=XXX, Path=UrlAddress, Converter={StaticResource visibilityConverter}}"> ` 
Cuestiones relacionadas