2017-03-05 65 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

相關問題