要在您的UserControl 中拥有一个ShowChildItems 属性来管理您孩子GridView 的Visibility,您首先需要将其设为DependencyProperty:
public static readonly DependencyProperty ShowChildItemsProperty =
DependencyProperty.Register("showChildItems", typeof (bool), typeof (MyUserControl), new PropertyMetadata(true));
public bool ShowChildItems
{
get { return (bool) GetValue(ShowChildItemsProperty); }
set { SetValue(ShowChildItemsProperty, value); }
}
在 UserControl 中,您将使用 ElementName 语法将 GridView Visibility 绑定到此属性 - 这样,GridView DataContext 绑定到什么并不重要:
<GridView Visibility="{Binding ShowChildItems, ElementName=ControlRoot, Converter={StaticResource VisibilityConverter}}" ItemsSource="{Binding ChildItems}">
为此,您需要将名称设置为UserControl 的根节点(我省略了其余属性):
<UserControl
x:Name="ControlRoot">
我还使用转换器将bool 属性绑定到Visibility:
<UserControl.Resources>
<local:BoolToVisibilityConverter x:Key="VisibilityConverter" />
</UserControl.Resources>
这是它的代码:
public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (!(value is bool)) return Visibility.Collapsed;
return (bool) value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
我希望这是您所要求的。根据您的问题,我不太确定。