2011-02-17 64 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"; 
     } 
    } 

瞧”它的工作原理。不是最优雅的解决方案,但它可以为您的场景完成工作

相关问题