将UserControl属性绑定到父数据上下文

时间:2017-03-05 21:32:27

标签: wpf xaml

我在WPF MVVM应用程序中有一个UserControl,它的可见性我希望绑定到其父级DataContext中的属性。问题是孩子UC拥有自己的DataContext。那么如何将子DataContext用于子UC的内部并仍然使用父DataContext进行可见性?

因此,例如,父控件的DataContext看起来像这样

class Parent
{
    public Child Child { get; private set; }

    public Visibility ChildVisible
    {
        get { return Visibility.Visible; }
    }
}

在XAML中,如何配置Visibility绑定以使其指向Parent.ControlVisible,而不是Child.ControlVisible?

<local:Child DataContext="{Binding Control}" Visibility="{Binding ControlVisible}" />

2 个答案:

答案 0 :(得分:1)

您可以使用ElementName引用父用户控件,并使用其DataContext,例如

<Border x:Name="parentControl" DataContext="{Binding Parent}" Visibility="Visible">

    <Border DataContext="{Binding Child}" Visibility="{Binding DataContext.MyVisibleProperty, ElementName=parentControl}">

    </Border>

</Border>

答案 1 :(得分:1)

  

如何将子DataContext用于子UC的内部

您不应该设置DataContext的{​​{1}}(请参阅this)。因此,在您的子UserControl的绑定中使用UserControlRelativeResource。请注意,您可以在子UserControl中使用父级的DataContext。

另外,不要忘记为模型和/或视图模型实现INotifyPropertyChanged