将网格添加到DataGrid

问题描述 投票:0回答:2

我想使用C#(WPF)以编程方式将Grid(可能包含图像,按钮或任何其他控件)添加到DataGrid。我也尝试使用这些代码进行测试:

public class DataGridItem
{
    public string Path { get; set; }
    public Grid Stats;
}

,xaml代码与DataGrid列:

<DataGridTextColumn Header="h1" Binding="{Binding Path}"/>
<DataGridTemplateColumn Width="100" Header="h2">

和后面的代码(在一个按钮中):

var g = new Grid()
{
    Background = System.Windows.Media.Brushes.Black 
};

var tb = new TextBlock()
{
     Text = DateTime.Now.ToString()
};

g.Children.Add(tb);

Dg.Items.Add(
    new DataGridItem()
    {
        Path = DateTime.Now.ToString(),
        Stats = g
    });

我尝试为Binding列设置h2,但我不能,因为它是DataGridTemplateColumn。是否有任何方法可以将h2的绑定设置为h1列?

或者,有没有办法以编程方式将Grid添加到DataGrid

c# wpf binding grid wpfdatagrid
2个回答
0
投票
<DataGridTemplateColumn Width="100" Header="h2">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ContentPresent Content="{Binding Stats}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

0
投票

有没有办法将h2的绑定设置为h1列?

没有。

或者,有没有办法以编程方式将Grid添加到DataGrid?

您可以通过编程方式创建CellTemplate

DataGridTemplateColumn h2 = Dg.Columns[1] as DataGridTemplateColumn;
const string Xaml = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><ContentControl Content=\"{Binding Stats}\" /></DataTemplate>";
h2.CellTemplate = XamlReader.Parse(Xaml) as DataTemplate;

示例XAML:

<DataGrid x:Name="Dg">
    <DataGrid.Columns>
        <DataGridTextColumn Header="h1" Binding="{Binding Path}"/>
        <DataGridTemplateColumn Width="100" Header="h2" />
    </DataGrid.Columns>
</DataGrid>
© www.soinside.com 2019 - 2024. All rights reserved.