#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), но работает. Но мне это показалось простой вещью, то, что должно быть возможно с привязкой из коробки.