在WPF中将具有KeyValuePair的实体绑定到Datagrid

时间:2019-01-02 13:33:44

标签: c# wpf

下面是我的带有键值对的课程

public class GridExpression
{
    public int Count { get; set; }
    public string Title { get; set; }
    public KeyValuePair<string, double> T1 { get; set; }
    public KeyValuePair<string, double> T2 { get; set; }
    public KeyValuePair<string, double> T3 { get; set; }


}
ObservableCollection<GridExpression> grid = new 
ObservableCollection<GridExpression>();

我想将上述ObservableCollection绑定到Datagrid

如果我们使用List代替Keypairvalue

就像XAML下面的代码一样,我添加了2个T1,一个是Grid,另一个是Wrappanel 网格至少显示文本块背景的水色

<DataGrid x:Name="_timeframe_Copy" Margin="0,408.152,10,10" AlternatingRowBackground="#FFFFF5D4" AutoGenerateColumns="False"
    HorizontalAlignment="Right" Width="766.167">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Count" Binding="{Binding Count}" />
        <DataGridTextColumn Header="Title" Binding="{Binding Title}" />
        <DataGridTemplateColumn Header="T1">
            <DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn Header="T1" MinWidth="10">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1" DataContext="{Binding T1, RelativeSource={RelativeSource AncestorType=Window}}">
                                <TextBlock Text="{Binding Key}" Margin="3,1" Background="Aqua" Foreground="White" />
                                <TextBlock Text="{Binding Value}" Margin="3,1" />
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn Header="T1" MinWidth="10">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <WrapPanel x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1" DataContext="{Binding T1, RelativeSource={RelativeSource AncestorType=Window}}">
                                <TextBlock Text="{Binding Key}" Margin="3,1" Background="Aqua" Foreground="White" />
                                <TextBlock Text="{Binding Value}" Margin="3,1" />
                            </WrapPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn Header="T2" MinWidth="10">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <WrapPanel x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1" DataContext="{Binding T2, RelativeSource={RelativeSource AncestorType=Window}}">
                                <TextBlock Text="{Binding Key}" Margin="3,1" Background="Aqua" Foreground="White" />
                                <TextBlock Text="{Binding Value}" Margin="3,1" />
                            </WrapPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn Header="T3" MinWidth="10">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <WrapPanel x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1" DataContext="{Binding T2, RelativeSource={RelativeSource AncestorType=Window}}">
                                <TextBlock Text="{Binding Key}" Margin="3,1" Background="Aqua" Foreground="White" />
                                <TextBlock Text="{Binding Value}" Margin="3,1" />
                            </WrapPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

我不知道如何绑定键值对以及如何绑定到 Datagridtemplate

1 个答案:

答案 0 :(得分:0)

问题出在您的DataContext绑定上。

DataContext中的DataGridTemplateColumn.CellTemplateGridExpression

这就是为什么只需要更改此行的原因:

<WrapPanel x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1" DataContext="{Binding T1, RelativeSource={RelativeSource AncestorType=Window}}">

收件人:

<WrapPanel x:Name="brdBroder" VerticalAlignment="Stretch" Margin="1" DataContext="{Binding T1}">