我在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}" />
答案 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的绑定中使用UserControl
或RelativeResource
。请注意,您可以在子UserControl中使用父级的DataContext。
另外,不要忘记为模型和/或视图模型实现INotifyPropertyChanged。