2011-02-17 22 views
1

我有一個包含childViewSilverlight:如何綁定到父視圖的DataContext?

<UserControl ... x:Name="MyParentView"> 
    <Grid> 
     <sdk:TabControl Name="ContactTabControl"> 
      <sdk:TabItem Header="Contact" Name="CustomerTabItem"> 
       <Grid> 
        <Views:CustomerView/> 
       </Grid> 
      </sdk:TabItem> 
     </sdk:TabControl> 
    </Grid> 
</UserControl> 

在我的CustomerView我想綁定的名字文本框家長的DataContext一個ParentView。我曾嘗試這個CustomerView內:

<TextBox Text={Binding ElementName=MyParentView, Path=DataContext.Firstname} /> 

我有CustomerView將無法看到其母公司所有,因此的ElementName「MyParentView」永遠不會被找到了感覺。

您對此有什麼建議?

回答

4

我已經做了類似的事情,但我只是將它直接綁定到Path,考慮到如果我不給它明確的數據上下文,它會查找層次結構並找到匹配的。

因此,這應該得到你想要的東西:

<TextBox Text={Binding Path=FirstName} /> 

,如果你需要指定明確的DataContext你總是可以做:

<Grid> 
    <Views:CustomerView DataContext={"CustomContextHere"}/> 
</Grid> 
+0

工作完美! xaml的魔力... – Houman 2011-02-17 11:00:42

+0

很高興能有所幫助。 – Maverik 2011-02-17 11:38:29

2

的替代解決方案Maverik的是:

1在客戶視圖中定義相關屬性:

public partial class CustomerView : UserControl 
    { 
     public CustomerView() 
     { 
      InitializeComponent(); 
     } 

     public static DependencyProperty FirstNameProperty = 
      DependencyProperty.Register("FirstName", typeof(string), typeof(CustomerView), new PropertyMetadata(string.Empty, CustomerView.FirstNameChanged)); 

     public string FirstName 
     { 
      get { return (string)GetValue(FirstNameProperty); } 
      set { SetValue(FirstNameProperty, value); } 
     } 

     private static void FirstNameChanged(object sender, DependencyPropertyChangedEventArgs e) 
     { } 
    } 

2修改客戶視圖的文本框綁定到這個依賴屬性(注意元件結合「這一」)

<UserControl x:Class="SLApp.CustomerView" 
    x:Name="this" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBox Text="{Binding Path=FirstName, ElementName=this, Mode=TwoWay}"/> 
    </Grid> </UserControl> 

3修改父視圖,並綁定它的DataContext到新的依賴屬性

<sdk:TabControl Name="ContactTabControl"> 
         <sdk:TabItem Header="Contact" Name="CustomerTabItem"> 
          <Grid> 
           <local:CustomerView FirstName="{Binding ElementName=ContactTabControl, Path=DataContext}"/> 
          </Grid> 
         </sdk:TabItem> 
        </sdk:TabControl> 

4集父DataContext的

public partial class MyParentView : UserControl 
    { 
     public MyParentView() 
     { 
      InitializeComponent(); 

      ContactTabControl.DataContext = "A name"; 
     } 
    } 

瞧」它的工作原理。不是最優雅的解決方案,但它可以爲您的場景完成工作

相關問題