Добавление сетки в DataGrid - PullRequest
       55

Добавление сетки в DataGrid

0 голосов
/ 13 февраля 2019

Я хочу добавить Grid (может содержать изображения, кнопки или любые другие элементы управления) в DataGrid, программно используя C # (WPF).Я также попытался использовать эти коды для проверки:

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 программно?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Есть ли способ установить привязку для h2 в качестве столбца h1?

No.

Или есть ли способ добавить 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>
0 голосов
/ 14 февраля 2019
<DataGridTemplateColumn Width="100" Header="h2">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ContentPresent Content="{Binding Stats}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...