2012-04-13 69 views
0

我这片XAML如何绑定到 '主' 排在DataGrid RowDetailsTemplate

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication1" 
    Title="MainWindow" Height="350" Width="525" 
    x:Name="Window" 
    > 
    <Grid DataContext="{Binding ElementName=Window}"> 
    <DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="True" CanUserAddRows="False" IsReadOnly="True"> 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate DataType="{x:Type local:Master}"> 
       <ListView ItemsSource="{Binding Details}"> 
        <ListView.View> 
         <GridView> 
          <GridViewColumn Header="MasterField1" DisplayMemberBinding="{Binding RelativeSource={????}, Path=MasterField1}" /> 
          <GridViewColumn Header="DetailsField1" DisplayMemberBinding="{Binding Field1}"/> 
          <GridViewColumn Header="DetailsField2" DisplayMemberBinding="{Binding Field2}"/> 
         </GridView> 
        </ListView.View> 
       </ListView> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 
    </DataGrid> 
</Grid> 

与这些两类:

public class Master 
{ 
    public string ID { get; set; } 
    public string MasterField1 { get; set; } 
    public ObservableCollection<Detail> Details { get; set; } 
} 

public class Detail 
{ 
    public string MasterID { get; set; } 
    public string Field1 { get; set; } 
    public string Field2 { get; set; } 
} 

现在我想完成是在RowDetailsTemplate我想要显示当前的MasterField1,但我应该如何做这个绑定工作?所以我应该怎么做:

<GridViewColumn Header="MasterField1" DisplayMemberBinding="{Binding RelativeSource={????}, Path=MasterField1}" /> 

为了有MasterField1显示?

感谢


找到了解决办法

我能做到这一点是这样的:

<GridViewColumn Header="MasterField1" DisplayMemberBinding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=DataContext.MasterField1}" /> 

回答

0

你为什么不创建的详细信息类硕士的财产?您还可以设置它,当你设置ID:

public class Detail 
{ 
    private string _masterID; 
    public string MasterID { 
     get { 
      return _masterI; 
     } 
     set { 
      _masterID = value; 
      Master = FindMasterById(value); 
     } 
    } 
    public Master Master { get ; set ; } 
    public string Field1 { get; set; } 
    public string Field2 { get; set; } 
} 

然后,只需做绑定:

<GridViewColumn Header="MasterField1" DisplayMemberBinding="{Binding Path=Master.MasterField1}" /> 
+0

是的,这将是一个解决方案,但我不想这样做。这个例子并不代表我想要的东西。我真正想知道的是如何在XAML中进行绑定,例如,如果我想显示可以绑定到的主数据的详细数量: Kwomba 2012-04-13 09:44:46

+0

但是你仍然可以这样做: dcarneiro 2012-04-13 10:02:38

+0

真的(我重新评估当我输入我的答案时),但我的情况下,我无法访问Master/Detail类的实现源。所以我必须做到这一点而不改变它们。 – Kwomba 2012-04-13 10:16:17