Este tipo de pregunta se hace por lo frecuencia y las respuestas por lo similares pensé que es hora de tener una única respuesta a todos (bien puede "más") de la bool a las preguntas de conversión de valor. Lo escribí en el blog here.
El código es bastante sencillo así que pego aquí también: -
public class BoolToValueConverter<T> : IValueConverter
{
public T FalseValue { get; set; }
public T TrueValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
Ahora puede crear convertidor para la visibilidad con una sola línea: -
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> { }
Entonces para usted puede crear un convertidor ejemplo, en un recurso como este: -
<local:BoolToVisibilityConverter x:Key="InverseVisibility" TrueValue="Collapsed" FalseValue="Visible" />
Nota del TrueValue
y FalseValue
se cambiaron de un orden más natural para darle la lógica invertida que deseaba. Con esto en la Resources
en su UserControl
o incluso App.xaml ahora se puede utilizar para obligar a la propiedad CanDownload
a TextBox
Visibility
propiedad: -
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />
genial. gracias por responder. eso es lo que estaba buscando. – joblot
tengo un problema extraño. cuando entro al método Convert y me cierro sobre targetType, dice System.Windows.Visibility pero comprueba si (targetType es Visibility) falla. cuando hago targetType.GetType(). ToString() en la ventana inmediata, devuelve System.RuntimeType! Estoy confundido con lo que está pasando aquí – joblot
así es como estoy vinculando –
joblot