Search code examples
wpfwpf-controlswpfdatagrid

Creating ItemTemplate for DataGrid with C#


Here is the XAML. I want to do the same thing with C#.

<DataGrid x:Name="myDataGrid">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Address">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Path=Address}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Please help.


Solution

  • If you want to create DataTemplate in code you should use FrameworkElementFactory (msdn).

    XAML:

    <DataGrid x:Name="myDataGrid" AutoGenerateColumns="False" Loaded="myDataGrid_Loaded">
        <DataGrid.Columns>
            <DataGridTemplateColumn x:Name="templateColumnAddress" Header="Address" />
        </DataGrid.Columns>
    </DataGrid>
    

    Code-behind:

    public void myDataGrid_Loaded(object sender, EventArgs e)
    {
        FrameworkElementFactory tbHolder = new FrameworkElementFactory(typeof(TextBox));
        tbHolder.SetBinding(TextBox.TextProperty, new Binding("Address"));          
        var dataTemplate = new DataTemplate();
        dataTemplate.VisualTree = tbHolder;
        dataTemplate.DataType = typeof(DataGridTemplateColumn);
        templateColumnAddress.CellTemplate = dataTemplate;
    }