[英]Use a dynamic custom cell inside a datagrid template column
我目前有一个包含文本的 DataGrid。 我想向这些列之一添加动态自定义布局。 布局将基于列表中的项目数量。 但是我不确定我需要如何初始化自定义单元格或如何将它添加到单元格。
动态自定义单元格需要如下所示:
foreach (var item in collection)
{
TextBox tb = new TextBox();
tb.Name = item.Name;
tb.ToolTip = item.Value;
}
然后需要添加到DataGrid
<DataGrid x:Name="DataGridName">
<DataGrid.Columns>
<DataGridTemplateColumn Header="ColumnName">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<"DYNAMIC CUSTOM CELL"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我四处搜索,但找不到足够的信息来执行此操作,因此非常感谢您的帮助!
编辑:这里是关于底层代码如何的更多信息:目前数据网格如下所示:
<DataGrid x:Name="creatureDatagrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="maxHP" Binding="{Binding MaxHp}"/>
<DataGridTextColumn Header="AC" Binding="{Binding Ac}"/>
<DataGridTextColumn Header="INIT" Binding="{Binding Init}"/>
<DataGridTextColumn Header="HP" Binding="{Binding Hp}"/>
<DataGridTextColumn Header="Protection" Binding="{Binding StrProtection}"/>
<DataGridTextColumn Header="Speed" Binding="{Binding StrSpeed}"/>
<DataGridTextColumn Header="Senses" Binding="{Binding StrSenses}"/>
<DataGridTemplateColumn Header="Traits">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Traits[0].Name}" ToolTip="{Binding Traits[0].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[1].Name}" ToolTip="{Binding Traits[1].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[2].Name}" ToolTip="{Binding Traits[2].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[3].Name}" ToolTip="{Binding Traits[3].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[4].Name}" ToolTip="{Binding Traits[4].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[5].Name}" ToolTip="{Binding Traits[5].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[6].Name}" ToolTip="{Binding Traits[6].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[7].Name}" ToolTip="{Binding Traits[7].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[8].Name}" ToolTip="{Binding Traits[8].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[9].Name}" ToolTip="{Binding Traits[9].Value}" Margin="2,0"/>
<TextBlock Text="{Binding Traits[10].Name}" ToolTip="{Binding Traits[10].Value}" Margin="2,0"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Actions" Binding="{Binding StrActions}"/>
<DataGridTextColumn Header="Conditions" Binding="{Binding Conditions}"/>
</DataGrid.Columns>
</DataGrid>
底层代码如下:
public partial class MainWindow : Window
{
private readonly MonsterService _monsterService;
private readonly DatabaseService _databaseService;
public MainWindow()
{
InitializeComponent();
_monsterService = new MonsterService();
_databaseService= new DatabaseService();
foreach (var player in _databaseService.Players)
{
creatureDatagrid.Items.Add(player);
}
_databaseService.DoStuff();
foreach (var monster in _databaseService.ActiveMonsters)
{
creatureDatagrid.Items.Add(monster);
}
}
}
Players
和Monsters
被添加到CreatureDatagrid
。 Players
和Monsters
是具有Name
、 HP
和Speed
等信息的类。
目前,我想为“特征”制作一个自定义单元格。 Monsters
包含一个list<NameValuePair>
,其中NameValuePair
包含Name
和Value
如您所见,特征的Name
和Value
显示正确,但代码并不是那么漂亮......
您可以将ItemsControl
放在绑定到Traits
属性的CellTemplate
中:
<DataGridTemplateColumn Header="Traits">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Traits}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" ToolTip="{Binding Value}" Margin="2,0"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.