Привязка столбца DataGrid к нескольким полям

#c# #wpf #xaml #binding #datagrid

#c# #wpf #xaml #привязка #datagrid

Вопрос:

Я хотел бы привязать текст и всплывающую подсказку в каждой ячейке к свойствам объекта. Сетка выглядит следующим образом (привязывает только текст):

 <DataGrid x:Name="myGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Prop1" Binding="{Binding Prop1.Text}" />
        <DataGridTextColumn Header="Prop2" Binding="{Binding Prop2.Text}" />
        <DataGridTextColumn Header="Prop3" Binding="{Binding Prop3.Text}" />
    </DataGrid.Columns>
</DataGrid>
 

Мои данные выглядят так:

 public class TableModel
{
    public List<RowModel> Rows = new List<RowModel>();
}

public class RowModel
{
    public CellModel Prop1 { get; set; }
    public CellModel Prop2 { get; set; }
    public CellModel Prop3 { get; set; }
}

public class CellModel
{
    public string Text { get; set; }
    public string ToolTip { get; set; }
}
 

Инициализация:

 TableModel t = new TableModel();
t.Rows.Add(new RowModel
{
    Prop1 = new CellModel { Text = "text1", ToolTip = "this is text 1" },
    Prop2 = new CellModel { Text = "text2", ToolTip = "this is text 2" },
    Prop3 = new CellModel { Text = "text3", ToolTip = "this is text 3" }
});

t.Rows.Add(new RowModel
{
    Prop1 = new CellModel { Text = "cell 2.1", ToolTip = "this is another text 1" },
    Prop2 = new CellModel { Text = "cell 2.2", ToolTip = "this is another text 2" },
    Prop3 = new CellModel { Text = "cell 2.3", ToolTip = "this is another text 3" }
});
 

Чтобы также привязать всплывающую подсказку, я думал, что возможно что-то подобное следующему:

 <DataGrid x:Name="myGrid" AutoGenerateColumns="False">
    <DataGrid.Resources>
        <DataTemplate x:Key="cellTemplate">
            <TextBlock Text="{Binding Prop1.Text}" ToolTip="{Binding Prop1.ToolTip}" />
        </DataTemplate>
    </DataGrid.Resources>
    <DataGrid.Columns>            
        <DataGridTemplateColumn Header="Prop1" CellTemplate="{StaticResource cellTemplate}" />
        <DataGridTemplateColumn Header="Prop2" CellTemplate="{StaticResource cellTemplate}" />
        <DataGridTemplateColumn Header="Prop3" CellTemplate="{StaticResource cellTemplate}" />
    </DataGrid.Columns>
</DataGrid>
 

Но приведенный выше код привязывает все столбцы к Prop1.

Можно ли как-то изменить это, чтобы привязка работала правильно?

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

Любая помощь будет высоко оценена.

Комментарии:

1. Весь вопрос в том, как вы динамически генерируете столбцы? Почему вы не можете динамически генерировать стиль столбцов? Вы также можете определить всплывающую подсказку в стиле.

2. Столбцы генерируются в цикле foreach . Я мог бы также динамически генерировать стиль там, но я предпочитаю иметь материал в XAML, если это возможно. Я нашел решение, которое кажется немного странным (и включает в себя вывод моего собственного класса из DataGridTemplateColumn), но работает. Но мне это показалось простой вещью, то, что должно быть возможно с привязкой из коробки.