Questo tipo di domanda viene posta così spesso e le risposte così simile ho pensato il suo tempo di avere una sola risposta a tutti (ok può "la maggior parte") del bool alle domande di conversione di valore. L'ho bloggato here.
Il codice è abbastanza semplice quindi mi incollo anche qui: -
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;
}
}
Ora è possibile creare convertitore per la visibilità con una battuta: -
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> { }
Allora per voi in grado di creare un convertitore di esempio, in una risorsa come questo: -
<local:BoolToVisibilityConverter x:Key="InverseVisibility" TrueValue="Collapsed" FalseValue="Visible" />
Annotare il TrueValue
e FalseValue
sono scambiati dall'ordine più naturale che ti dà la logica invertita che volevi. Con questo in Resources
nel vostro UserControl
o anche App.xaml ora è possibile utilizzarlo per associare alla proprietà CanDownload
a TextBox
Visibility
proprietà: -
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />
ottimo. grazie per la risposta. questo è quello che stavo cercando. – joblot
sto avendo uno strano problema. quando passo al metodo Convert e passa il mouse su targetType che dice System.Windows.Visibility ma controlla se (targetType è Visibility) fallisce. quando faccio targetType.GetType(). ToString() nella finestra immediata restituisce System.RuntimeType! Sono confuso cosa sta succedendo qui – joblot
questo è come sto legando – joblot