2012-07-23 64 views
0

我想绑定列表到DataGrid:如何正确列表使用的ItemSource绑定到WPF 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> 

代码:

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); 
} 

当DGAddRow被调用时,DataGrid不会更新其值。

我在这里做错了什么?任何帮助,将不胜感激。

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

回答

7

使用的ObservableCollection <>而不是List <>并dataGridRows公众。

+3

公共和一个物业。 – LPL 2012-07-23 09:16:10

1

好吧,让我惊喜的是dataGridRows是私人领域。如果我没有弄错,你不能绑定到私人领域,最好是把它变成公共财产(纠正我,如果我错了)。

第二件事困扰我的是一个AutoGenerateColumns="True",电网不知道如何运作时AutoGenerateColumnsTrue并明确地指定列。尝试设置AutoGenerateColumns="False"

而且第三一个:为@Rover已经表示,尝试类型datagridRows设置为ObservableCollection<CommGDDataSource>

+0

如果他声明了自己的列,则必须将“AutoGenerateColumns”属性设置为“False”。 – squixy 2013-12-31 10:46:59

+0

@squixy,谢谢,修正。 – 2013-12-31 19:12:39