我正试图在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>
“名称”列按预期工作,但我想知道是否有一种方法可以在“索引”列中显示集合中当前元素的索引,因此我不必将其作为数据项中的数据项。收藏本身。
答案 0 :(得分:1)
我刚刚创建了这个。
<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>
代码隐藏:
public partial class MainWindow : Window
{
List<Item> items = new List<Item>();
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
items.Add(new Item() { Name = Guid.NewGuid().ToString() });
DGrid.DataContext = items;
}
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
{
var block = sender as TextBlock;
var item = block.Tag as Item;
block.Text = items.IndexOf(item).ToString();
}
}
public class Item
{
public string Name { get; set; }
}
这不是一个漂亮的解决方案,但它确实有效。如果你更喜欢使用绑定而不是事件,我想你可以在Item
本身内部创建一个包含Item
的集合的引用,然后创建一个返回索引的属性,就像这样:
public class Item
{
public List<Item> ItemCollection { get; set; }
public string Index
{
get
{
return ItemCollection.IndexOf(this).ToString();
}
}
public string Name { get; set; }
}
然后修改两行:
items.Add(new Item() { Name = Guid.NewGuid().ToString(), ItemCollection = items });
和
<TextBlock Text="{Binding Index}" />
我会说实话 - 我不确定这是否是最好的方法。 ;)