C# Wpf将列绑定到列表
我想知道解决我的问题最好的方法是什么。我需要为我的数据生成DataGrid。我的数据如下所示:C# Wpf将列绑定到列表,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我想知道解决我的问题最好的方法是什么。我需要为我的数据生成DataGrid。我的数据如下所示: Competitor{ public string Name {get; set;} public string Sname {get; set;} public List<TimeSpan> Laps {get; set;} } Name | SName | Lap1 | Lap2 | Lap3 | Lap4 | Lap5 asd | dsa
Competitor{
public string Name {get; set;}
public string Sname {get; set;}
public List<TimeSpan> Laps {get; set;}
}
Name | SName | Lap1 | Lap2 | Lap3 | Lap4 | Lap5
asd | dsa | 1:1:1 | 1:2:1 | 1:0:1 | 1:2:2 | 1:3:1
bbb | cccc | 2:2:2 | 2:1:1 | 1:0:0 | 2:0:0 | 1:2:3
...
我检查了这个方法,但它并不完全符合我的预期
你知道怎么做吗?
(如果您可以使用ListBox而不是DataGrid,则应自动添加任何其他带有新lap的手动添加列)。您可以这样做: **.xaml
<StackPanel>
<!--Header-->
<StackPanel Orientation="Horizontal" Margin="5 0 0 0">
<TextBlock Width="100" Text="Name"/>
<TextBlock Width="100" Text="Sname"/>
<ListBox x:Name="ListHeader" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Width="100"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
<!--List of Competitors-->
<ListBox x:Name="Mylist">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Text="{Binding Name}"/>
<TextBlock Width="100" Text="{Binding Sname}"/>
<ListBox ItemsSource="{Binding Laps}" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Width="100"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
**.cs
public主窗口()
{
初始化组件();
列表=新列表();
添加(新竞争对手{Name=“Renee”,Sname=“Lewallen”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
添加(新竞争对手{Name=“Barney”,Sname=“Fett”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”),TimeSpan.Parse(“00:40”)});
添加(新竞争对手{Name=“Nelle”,Sname=“Butterfield”,Laps=newlist{TimeSpan.Parse(“00:10”)、TimeSpan.Parse(“00:20”)、TimeSpan.Parse(“00:30”)、TimeSpan.Parse(“00:40”)、TimeSpan.Parse(“00:50”)};
添加(新竞争对手{Name=“Marc”,Sname=“Soriano”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”)});
添加(新竞争对手{Name=“Cathi”,Sname=“Stumpff”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
添加(新竞争对手{Name=“Jefferey”,Sname=“Hunziker”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
添加(新竞争对手{Name=“bernice”,Sname=“Courtney”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
var LapsCounter=list.Select(w=>w.Laps.Count).Max();
List listH=新列表();
对于(int i=1;i,如果您可以使用ListBox而不是DataGrid。您可以这样做:
**.xaml
<StackPanel>
<!--Header-->
<StackPanel Orientation="Horizontal" Margin="5 0 0 0">
<TextBlock Width="100" Text="Name"/>
<TextBlock Width="100" Text="Sname"/>
<ListBox x:Name="ListHeader" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Width="100"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
<!--List of Competitors-->
<ListBox x:Name="Mylist">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Text="{Binding Name}"/>
<TextBlock Width="100" Text="{Binding Sname}"/>
<ListBox ItemsSource="{Binding Laps}" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Width="100"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
**.cs
public主窗口()
{
初始化组件();
列表=新列表();
添加(新竞争对手{Name=“Renee”,Sname=“Lewallen”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
添加(新竞争对手{Name=“Barney”,Sname=“Fett”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”),TimeSpan.Parse(“00:40”)});
添加(新竞争对手{Name=“Nelle”,Sname=“Butterfield”,Laps=newlist{TimeSpan.Parse(“00:10”)、TimeSpan.Parse(“00:20”)、TimeSpan.Parse(“00:30”)、TimeSpan.Parse(“00:40”)、TimeSpan.Parse(“00:50”)};
添加(新竞争对手{Name=“Marc”,Sname=“Soriano”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”)});
添加(新竞争对手{Name=“Cathi”,Sname=“Stumpff”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
添加(新竞争对手{Name=“Jefferey”,Sname=“Hunziker”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
添加(新竞争对手{Name=“bernice”,Sname=“Courtney”,Laps=newlist{TimeSpan.Parse(“00:10”),TimeSpan.Parse(“00:20”),TimeSpan.Parse(“00:30”)});
var LapsCounter=list.Select(w=>w.Laps.Count).Max();
List listH=新列表();
对于(int i=1;i
为您的记录保留一个DataTable
。将此DataTable
与DataGrid的AutogenerateColumns
绑定到true
将Laps的列表
更改为可观察采集
。
observedcollection
在添加/删除项目时激发CollectionChanged
事件
手柄CollectionChanged
ev
Dgrid1.ItemsSource = null;
Dgrid1.ItemsSource = oldDataTable.DefaultView;