如何在 WPF DataGrid 中显示来自单独 table 的特定列?

How to display certain column from a separate table in WPF DataGrid?

我有两个 table,我们称它们为 T 和 V。

Table T 包含需要在数据网格中显示的所有数据,table V 包含有关 table T 中特定列的数据。因此 table T 包含来自 table V 的外键。

我想根据 table T 中的键显示来自 table V 的文本列。

通过使用

myDataGrid.ItemSource = List<T> myTableTList 

<DataGrid Grid.Row="0" 
    Name="datesDG" 
    Margin="5, 5, 5, 5"  
    SelectionMode="Extended" 
    IsReadOnly="True" 
    AutoGenerateColumns="False" 
    ItemsSource="{Binding dates, Mode=TwoWay}">

    <DataGrid.Columns>
        <DataGridTextColumn Header="Key Column" Binding="{Binding Path=DateKey}" />
        <DataGridTextColumn Header="Publish Date" Binding="{Binding Path=publishDate, StringFormat=\{0:dd.MM.yyyy\}}" />
        <DataGridTextColumn Header="Editing Date" Binding="{Binding Path=editingDate, StringFormat=\{0:dd.MM.yyyy\}}"/>
        <DataGridTextColumn Header="Data Status" Binding="{Binding Path=dataStatusKey}"/>
    </DataGrid.Columns>

</DataGrid>

所以 dataStatusKey 是来自 table V 的外键,但我想显示来自 table V 对应于 dataStatusKey 的文本字段。

如果我用 T 类型的数据填充 DataGrid,我该怎么做?

我是否应该创建单独的 class 并用适当的字段填充它并制作一个列表,然后将我的网格的 ItemSource 设置为这个新的数据类型列表?

Should I create separate class and fill it up with appropriate fields and make a list of it and then set my grid's ItemSource to this new data type list?

是的。你基本上会这样做:

  • 创建一个新的 class X,其中每列 属性 要显示在 DataGrid
  • 使用您从视图模型中的 TV 对象获得的数据填充它
  • ItemsSource属性绑定到视图模型IEnumerable<X>属性

注意,如果T有一个导航属性,你可以直接绑定到这个:

<DataGridTextColumn Header="Text" Binding="{Binding Path=V.Text}"/>