【问题标题】:XAML DataGrid - RowDetail binding to main Row dataXAML DataGrid - RowDetail 绑定到主行数据
【发布时间】:2017-02-11 21:46:27
【问题描述】:

我在使用数据网格时遇到了问题,我想知道是否可以使绑定以某种方式工作。如果可以的话,它将使我免于进行一些不太合适的大量重构。

无论如何,在下面的网格中,我有主要的 DataGrid 列/行以及子行的 RowDetailsTemplate。主 DataGrid 绑定到 Positions 集合,而 RowDetailsTemplate 绑定到 Taxlots 集合。 Taxlots 集合中的项目没有 Description 或 Ticker 属性,而 Positions 集合中的项目有。

是否可以将 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>

【问题讨论】:

  • 请看this,我认为RelativeSource 可能有用。
  • 做得很完美。我希望我能给你功劳,但我认为 cmets 不允许这样做。
  • 太好了!我希望您在链接中通过投票来认可该答案。
  • 我现在做了,谢谢。

标签: c# xaml datagrid


【解决方案1】:

CodingYoshi 做到了。我怀疑这将是一个 FindAncestor RelativeSource 绑定,但我对 XAML 很陌生,所以我不知道该怎么做。我最终使用了这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2013-08-07
    相关资源
    最近更新 更多