La proprietà ConverterParameter
non può essere associata perché non è una proprietà di dipendenza.
Poiché Binding
non è derivato da DependencyObject
, nessuna delle sue proprietà può essere proprietà di dipendenza. Di conseguenza, un binding non può mai essere l'oggetto target di un altro binding.
Esiste tuttavia una soluzione alternativa. Si potrebbe utilizzare un MultiBinding
con multi-value converter invece di un normale Binding:
<Style TargetType="FrameworkElement">
<Setter Property="Visibility">
<Setter.Value>
<MultiBinding Converter="{StaticResource AccessLevelToVisibilityConverter}">
<Binding Path="Tag" RelativeSource="{RelativeSource Mode=FindAncestor,
AncestorType=UserControl}"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
Il convertitore multi-valore ottiene una matrice di valori di origine come input:
public class AccessLevelToVisibilityConverter : IMultiValueConverter
{
public object Convert(
object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.All(v => (v is bool && (bool)v))
? Visibility.Visible
: Visibility.Hidden;
}
public object[] ConvertBack(
object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}