2017-03-05 62 views
1

我在WPF MVVM应用程序中有一个UserControl,它的可见性我想要绑定到其父级的DataContext中的属性。问题是孩子UC有它自己的DataContext。那么,如何使用子DataContext作为子UC的内部组件,并仍然使用父级DataContext进行可见性?将UserControl属性绑定到父数据上下文

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

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

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

在XAML,我该怎么配置能见度结合,使其指向Parent.ControlVisible,而不是Child.ControlVisible的?

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

回答

0

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

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

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

    </Border> 

</Border> 
+0

也许我错过了一些东西,但是ElementName给了我XAML中的父级UserControl,而不是视图模型中的父级DataContext,对吗? – user7134019

+0

你说得对。可见性=“{绑定DataContext.Visibility,ElementName = parentControl}”> - 编辑答案 –

+0

但是这将设置孩子的可见性等于父,这不是我想要做的。在这种情况下,父母总是可见的。我只是希望子级的可见性由父级数据上下文中的属性确定。 – user7134019

0

如何使用孩子的DataContext为孩子UC

的内部你不应该设置一个UserControlDataContext(见this)。因此,在子UserControl的Bindings中使用RelativeResourceElementName。请注意,您可以在您的子UserControl中使用父级的DataContext。

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

+0

好的信息。虽然在使用这种方法时可见性正在工作,但绑定仍然无法正常工作。在子网格上,我使用了以下内容,但它似乎是指孩子,我认为,因为父母和孩子都是UserControl。有没有办法确保它传递给父母? DataContext =“{Binding Path = PropName,RelativeSource = {RelativeSource AncestorType = UserControl}}” – user7134019

+0

使用''AnsestorLevel = 2''绑定到第二个usercontrol。 – Ron

+0

好的,这让我回到父级用户控件,但该属性实际上是父级的视图模型(数据上下文)。有没有办法告诉它绑定到父控件数据上下文的属性? – user7134019

相关问题