2017-02-11 81 views
1

我遇到了數據網格問題,我想知道是否可以以某種方式進行綁定工作。如果可以的話,它會使我免於一些重大的重構,這並不合適。XAML DataGrid - RowDetail綁定到主行數據

無論如何,在下面的網格中,我有主要的DataGrid列/行以及子行的RowDetailsTemplate。主DataGrid綁定到Positions集合,RowDetailsTemplate綁定到Taxlots集合。 Taxlots集合中的項目沒有Description或Ticker屬性,而位置集合中的項目卻有。

是否可以將RowDetailsTemplate中的Ticker和Description列綁定到主DataGrid中的相應列?

簡體以下XAML:

 <DataGrid x:Name="SecurityDataGrid" 
        ItemsSource="{Binding Positions, 
           NotifyOnSourceUpdated=True, 
           UpdateSourceTrigger=PropertyChanged}"> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <DataGrid ItemsSource="{Binding Taxlots}"> 
         <DataGrid.Columns> 
          <DataGridTextColumn Binding="{Binding Ticker}"/> 
          <DataGridTextColumn Binding="{Binding Description}"/> 
          <DataGridTextColumn Binding="{Binding Shares}"/> 
         </DataGrid.Columns> 
        </DataGrid> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
      <DataGrid.Columns> 
       <DataGridTextColumn Width="Auto" Header="Ticker" Binding="{Binding Path=Ticker, Mode=OneWay}" 
            TextOptions.TextFormattingMode="Display" /> 
       <DataGridTextColumn Width="Auto" Header="Description" Binding="{Binding Path=Description, Mode=OneWay}" 
            TextOptions.TextFormattingMode="Ideal" /> 
       <DataGridTextColumn Width="Auto" Header="Shares" Binding="{Binding SharesOwned, Mode=OneWay, Converter={StaticResource DecimalToStringConverter}}" 
            CellStyle="{StaticResource CellStyleRight}" />      
      </DataGrid.Columns> 
     </DataGrid> 
+1

請參閱[這裏](http://stackoverflow.com/questions/3012586/is-there-a-simple-way-to-specify-a-wpf-databinding-在哪裏路徑是一級),我認爲'RelativeSource'可能工作。 – CodingYoshi

+0

完成了。我希望我可以給你信貸,但我不認爲這是允許的。 – CubemonkeyNYC

+1

太棒了!我希望你在鏈接上對這個答案進行了評價,並對它進行了提升。 – CodingYoshi

回答

0

CodingYoshi釘它。我懷疑它會是一個FindAncestor RelativeSource綁定,但是我對XAML非常陌生,以至於我不確定如何去做。我結束了使用此:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
      AncestorType={x:Type DataGrid}}, 
      Path=DataContext.*PropertyName*}"