C# 如何将列表正确绑定到WPF数据网格

C# 如何将列表正确绑定到WPF数据网格,c#,.net,wpf,xaml,datagrid,C#,.net,Wpf,Xaml,Datagrid,我正在尝试使用ItemSource将列表绑定到datagrid: xaml.cs <UserControl x:Class="DDCUI.CommDiagnosisWPFCtrl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

我正在尝试使用ItemSource将列表绑定到datagrid:

xaml.cs

<UserControl x:Class="DDCUI.CommDiagnosisWPFCtrl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" Height="800" Width="300">
    <DockPanel>
        <DataGrid DockPanel.Dock="Top" Height="300" AutoGenerateColumns="True" Name="DGComm" CanUserResizeColumns="True" IsReadOnly="True" ItemsSource="{Binding Source=dataGridRows}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="No." Binding="{Binding Number}" Width="0.1*"/>
                <DataGridTextColumn Header="Time" Binding="{Binding Time}" Width="0.1*" />
                <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="0.15*" />
                <DataGridTextColumn Header="Source" Binding="{Binding Source}" Width="0.15*" />
                <DataGridTextColumn Header="Destination" Binding="{Binding Destination}" Width="0.15*" />
                <DataGridTextColumn Header="Data" Binding="{Binding Data}" Width="0.5*" />
            </DataGrid.Columns>
        </DataGrid>
        <RichTextBox DockPanel.Dock="Bottom" Height="150" Name="RtbHexCode"/>
        <TreeView DockPanel.Dock="Bottom" Height="200" Name="TreeViewDecode"/>

    </DockPanel>
</UserControl>

代码:

公共类CommDGDataSource
{
公共字符串编号{get;set;}
公共字符串时间{get;set;}
公共字符串协议{get;set;}
公共字符串源{get;set;}
公共字符串目标{get;set;}
公共字符串数据{get;set;}
}
私有列表dataGridRows=新列表();
私有void DGAddRow(字符串名称,函数类型ft)
{
CommDGDataSource ds=新的CommDGDataSource();
协议=名称;
ds.Source=“”;
ds.Destination=“”;
ds.Number=rowCount.ToString();
ds.Data=“”;
ds.Time=“”;
dataGridRows.Add(ds);
}
调用DGAddRow时,DataGrid不会更新其值

我做错了什么?任何帮助都将不胜感激


此外,XAML甚至在填充数据之前就预先生成空行。我希望能够仅显示填充了项目的行(并将新行添加到最后一个填充行的底部)。我怎样才能做到这一点呢?

好吧,让我吃惊的第一件事是
dataGridRows
是私有字段。若我并没有弄错的话,你们不能绑定到私有领域,最好让它成为公共财产(若我错了,请纠正我)

第二个困扰我的问题是一个
AutoGenerateColumns=“True”
,当
AutoGenerateColumns
True
且列被明确指定时,不确定网格如何工作。尝试设置
AutoGenerateColumns=“False”


第三个问题是:@Rover已经说过,试着将type
datagridRows
设置为
observedcollection
使用observedcollection而不是List,并将datagridRows公开。

如果他声明自己的列
AutoGenerateColumns
属性必须设置为
False
public class CommDGDataSource
{
    public string Number { get; set; }
    public string Time { get; set; }
    public string Protocol { get; set; }
    public string Source { get; set; }
    public string Destination { get; set; }
    public string Data { get; set; }
}

private List<object> dataGridRows = new List<object>();

private void DGAddRow(string name, FunctionType ft)
{
    CommDGDataSource ds = new CommDGDataSource();
    ds.Protocol = name;
    ds.Source = "";
    ds.Destination = "";
    ds.Number = rowCount.ToString();
    ds.Data = "";
    ds.Time = "";
    dataGridRows.Add(ds);
}