Как создать пользовательский DataGridColumn wpf

167
09 августа 2018, 19:00

Есть выгруженная в таблица базы данных.

public ObservableCollection<Items> TableData { get; private set; }
public class Items
{
    public ObservableCollection<object> ItemList { get; set; } = new ObservableCollection<object>();
}

Количество колонок и строчек не знаю. Тип колонок выгружаю при запуске программы. Хочу это визуализировать в DataGrid. Если использовать стандартные типы, то работает.

<UserControl x:Class="TMS.TableViewerUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TMS"
         mc:Ignorable="d" 
         d:DesignHeight="450" d:DesignWidth="800">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <DataGrid x:Name="Data" Grid.Row="1" AutoGenerateColumns="False">
    </DataGrid>
</Grid>

        foreach (KeyValuePair<string, ColumnInfo> column in DataBaseInfo.ColumnInfo)
        {
            Data.Columns.Add(new DataGridTextColumn()
            {
                Header = column.Key,
                Binding = new Binding()
                {
                    Path = new PropertyPath(String.Format("ItemList[{0}]", columnNumber++))
                }
            });
        }

Но их функционала не хватает. Пытаюсь делать через DataGridTemplateColumn

public partial class TableDataTemplate : DataGridTemplateColumn
{
    public TableDataTemplate()
    {
        InitializeComponent();
    }
}
<DataGridTemplateColumn x:Class="TMS.TableDataTemplate"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TMS"
         mc:Ignorable="d">
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate x:Name="TamplateItem">
        <Grid x:Name="Root" >
            <TextBox x:Name="ItemValue" TextWrapping="Wrap" Text="{Binding Path=???}"/>
        </Grid>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

        foreach (KeyValuePair<string, ColumnInfo> column in DataBaseInfo.ColumnInfo)
        {
            Data.Columns.Add(new DataGridTemplateColumn()
            {
                Header = column.Key,
            });
        }

Как я могу менять параметры созданных созданных шаблонов? Можно ли как-то обращаться по имени (ItemValue) к примеру? Я так понимаю, сейчас я создаю лишь шаблон. Как создать элемент по этому шаблону?

READ ALSO
С# + PowerShell скопировать файл

С# + PowerShell скопировать файл

Есть файл, задача стоит перекинуть этот файл на другой компьютер через powershell + C# перекинуть надо частями, по 1кб

178
Как проверить динамически созданные radiobuttons

Как проверить динамически созданные radiobuttons

Пишу клиентскую часть обычных тестов(викторины), где динамически, в зависимости от кол-ва вариантов ответов, создаются radiobuttonВ какой способ...

269
Итерация по всем точкам внутри GraphicsPath

Итерация по всем точкам внутри GraphicsPath

Товарищи, возник такой вопрос: Положим, мы имеем некий GraphicsPathНеобходимо каким-то образом достать из него все точки с целыми координатами,...

158
Распознание текста с картинки

Распознание текста с картинки

Как очень качественно распознать текст с помощью Tesseract или ему подобных ?

134