2017-02-11 7 views
1

У меня возникают проблемы с datagrid, и мне интересно, могу ли я сделать привязку определенным образом. Если смогу, это спасло бы меня от какого-то тяжелого рефакторинга, который не был бы действительно уместным.XAML DataGrid - привязка RowDetail к основным данным строки

В любом случае, в нижеприведенной сетке у меня есть основные столбцы/строки DataGrid, а также RowDetailsTemplate для подстрок. Основной DataGrid привязан к коллекции Positions, а RowDetailsTemplate привязан к коллекции Taxlots. Элементы в коллекции Taxlots не имеют свойства Description или Ticker, тогда как элементы в коллекции Positions делают.

Можно ли связать столбцы Тикер и Описание в RowDetailsTemplate с соответствующими столбцами в главном 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- where-the-path-is-one-level), я думаю, что «RelativeSource» может работать. – CodingYoshi

+0

Это отлично. Хотел бы я дать вам кредит, но я не думаю, что комментарии допускают это. – CubemonkeyNYC

+1

Отлично! Надеюсь, вы дали ответ на этот ответ в ссылке, выставив его. – CodingYoshi

ответ

0

CodingYoshi прибил его. Я подозревал, что это будет привязка RelativeSource FindAncestor, но я настолько новичок в XAML, что не был уверен, как это сделать. Я завелся с помощью этого:

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