Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# Wpf将列绑定到列表_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

C# Wpf将列绑定到列表

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

我想知道解决我的问题最好的方法是什么。我需要为我的数据生成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    | 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;