2012-11-23 50 views
0

获取数据,我有以下数据网格:无法从祖先的Datagrid

<DataGrid Name="dataGridWorkOrders" ItemsSource="{StaticResource workorders}" Grid.Row="1" IsReadOnly="True" HorizontalAlignment="Stretch" AutoGenerateColumns="False" VerticalAlignment="Top"> 
      <DataGrid.Columns> 
<DataGridTextColumn Header="Total Quantity" Binding="{Binding TotalQuantity}"/> 
      </DataGrid.Columns> 


    <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <Border BorderThickness="0" Background="BlanchedAlmond" Padding="10"> 
         <DataGrid IsReadOnly="True" ItemsSource="{Binding ScheduleCollection}" AutoGenerateColumns="False"> 
<DataGrid.Columns> 


    <DataGridTextColumn Header="Total Quantity" Binding="{Binding Path=TotalQuantity, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 

</DataGrid.Columns> 

现在里面rowdetails模板我尝试访问绑定到父DataGrid行TotalQuantity。我试着用祖先achiving但不工作

编辑
代码型号:

class WorkOrders : ObservableCollection<WorkOrder> 
    { 
     public WorkOrders() 
     { 
      var orderList = OrderDetailsProvider.GetOrders() as List<WorkOrder>; 

      orderList.ForEach(
         order => this.Add(order)); 
     } 
    } 

public class WorkOrder:BaseEntity 
    { 
     private string orderID; 
     private int totalQuantity; 
     private string status; 
     private ObservableCollection<Schedule> scheduleCollection; 

     ....All the fields exposed as proporties 
} 
+0

你能否也展示工作订单资源请的代码? –

+0

@FlorianGl,Updated wororders and WorkOrder code – Simsons

+1

将'Path = TotalQuantity'改为'Path = DataContext.TotalQuantity' –

回答

2

您可以用绑定发现DataGridRow 2级了树做。
找到的第一个是RowDetailsTemplate中的DataGrid中的一个(我们不需要),第二个是当前RowDetailsTemplate的父行。

通过绑定到DataContext.TotalQuantity找到DataGridRow你应该得到你正在寻找的价值。

所以在细节列模板,你可以这样做:

<DataGridTextColumn Header="Total Quantity" 
    Binding="{Binding Path=DataContext.TotalQuantity, 
      RelativeSource={RelativeSource AncestorType=DataGridRow, AncestorLevel=2}}" /> 
+0

它也适用于'Binding =“{Binding Path = DataContext.TotalQuantity, RelativeSource = {RelativeSource AncestorType = DataGrid} “”我想。 –

+0

是的,它会工作,但也更容易打破。如果他决定在细节模板中完全不使用DataGrid,或者由于某种原因在将来为其设置不同的DataContext,它将不再起作用。也直接绑定到包含该值的控件,比使用一些发生继承datacontext的中间人更有意图揭示imo。 –