2017-02-11 4 views
1

Ich habe Probleme mit einem Datagrid und ich frage mich, ob ich eine verbindliche Arbeit auf eine bestimmte Weise machen kann. Wenn ich kann, würde es mich vor einem starken Refactoring bewahren, das nicht wirklich angemessen wäre.XAML DataGrid - RowDetail Bindung an Hauptzeile Daten

Wie auch immer, im unteren Raster habe ich die wichtigsten DataGrid Spalten/Zeilen sowie eine RowDetailsTemplate für die Unterzeilen. Das Haupt-DataGrid ist an die Positionssammlung gebunden und die RowDetailsTemplate ist an die Taxlots-Auflistung gebunden. Elemente in der Taxlots-Auflistung verfügen nicht über eine Beschreibungs- oder Ticker-Eigenschaft, während Elemente in der Positionssammlung dies tun.

Ist es möglich, die Spalten Ticker und Beschreibung in RowDetailsTemplate an die entsprechenden Spalten im Haupt-DataGrid zu binden?

Simplified XAML unten:

 <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

Bitte beachten Sie [diese] (http://stackoverflow.com/questions/3012586/is-there-a-simple-way-to-specify-a-wpf-databinding- where-the-path-is-one-level), denke ich, dass "RelativeSource" funktioniert. – CodingYoshi

+0

Das hat es perfekt gemacht. Ich wünschte, ich könnte Ihnen den Kredit geben, aber ich denke nicht, dass Kommentare dies zulassen. – CubemonkeyNYC

+1

Das ist großartig! Ich hoffe, Sie haben dieser Antwort in dem Link zugestimmt, indem Sie sie aufgewertet haben. – CodingYoshi

Antwort

0

CodingYoshi es genagelt. Ich vermutete, dass es eine FindAncestor RelativeSource-Bindung sein würde, aber ich bin bei XAML so neu, dass ich nicht sicher war, wie ich es machen sollte. Ich zog mit diesem:

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