Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用DataGridTemplateColumn构建DataGrid时获取当前集合元素的索引?_C#_Wpf_Data Binding_Datagrid_Datagridtemplatecolumn - Fatal编程技术网

C# 如何在使用DataGridTemplateColumn构建DataGrid时获取当前集合元素的索引?

C# 如何在使用DataGridTemplateColumn构建DataGrid时获取当前集合元素的索引?,c#,wpf,data-binding,datagrid,datagridtemplatecolumn,C#,Wpf,Data Binding,Datagrid,Datagridtemplatecolumn,我试图在DataGrid中显示一个数组,如下所示: XAML: <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" > <DataGrid.Columns> <DataGridTemplateColumn Header="Index" IsReadOnly="True"> <DataGridTemplateColumn.Ce

我试图在DataGrid中显示一个数组,如下所示:

XAML:

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Index" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Items, Path=}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Name" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Items, Path=Name}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>


“名称”列按预期工作,但我想知道是否有办法在“索引”列中显示集合中当前元素的索引,这样我就不必将其作为集合本身的数据项了。

我刚刚创建了这个

    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"  Name="DGrid">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Index" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Tag="{Binding}" Loaded="TextBlock_Loaded" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Name" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
然后修改两行:

            items.Add(new Item() { Name = Guid.NewGuid().ToString(), ItemCollection = items });



老实说,我不确定这是不是最好的办法

我刚刚创建了这个

    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"  Name="DGrid">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Index" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Tag="{Binding}" Loaded="TextBlock_Loaded" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Name" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
然后修改两行:

            items.Add(new Item() { Name = Guid.NewGuid().ToString(), ItemCollection = items });



老实说,我不确定这是不是最好的办法

我想我更喜欢基于事件的解决方案,虽然我同意这一点,但两者都不是很好。我实际上认为绑定版本是一种方式。。。只是在项目中引用集合的要求可以是PITA。我想我更喜欢基于事件的解决方案,尽管我同意这一点,但两者都不是很好。我实际上认为绑定版本是最好的选择。。。只是在项目中引用集合的需求可以是PITA。
                        <TextBlock Text="{Binding Index}" />