Thuộc tính ConverterParameter
không thể bị ràng buộc vì nó không phải là thuộc tính phụ thuộc.
Vì Binding
không được bắt nguồn từ DependencyObject
, không có thuộc tính nào của nó có thể là thuộc tính phụ thuộc. Kết quả là, một ràng buộc không bao giờ có thể là đối tượng mục tiêu của một ràng buộc khác.
Tuy nhiên, có một giải pháp thay thế. Bạn có thể sử dụng một MultiBinding
với một multi-value converter thay vì một Binding bình thường:
<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>
Bộ chuyển đổi đa giá trị được một mảng các giá trị nguồn như đầu vào:
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();
}
}