繁体   English   中英

在数据网格模板列中使用动态自定义单元格

[英]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);
        }
    }


}

PlayersMonsters被添加到CreatureDatagrid PlayersMonsters是具有NameHPSpeed等信息的类。

目前,我想为“特征”制作一个自定义单元格。 Monsters包含一个list<NameValuePair> ,其中NameValuePair包含NameValue

当前的 Datagrid 如下所示: 在此处输入图像描述

如您所见,特征的NameValue显示正确,但代码并不是那么漂亮......

您可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM