簡體   English   中英

如何將列表正確綁定到WPF DataGrid

[英]How to properly bind a list to a WPF DataGrid

我正在嘗試使用ItemSource將列表綁定到數據網格:

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甚至在填充空行之前都會預先生成空行。 我希望能夠僅顯示填充有項目的行(並將新行添加到最后一個填充行的底部)。 我該怎么做?

使用ObservableCollection <>而不是List <>,並使dataGridRows公開。

好的,令我驚訝的第一件事是dataGridRows是私有字段。 如果我沒記錯的話,就不能綁定到私有字段,最好將其設為公共屬性。(如果我寫錯了,請更正我)。

第二件困擾我的事情是一個AutoGenerateColumns="True" ,不確定當AutoGenerateColumnsTrue且顯式指定了列時網格如何工作。 嘗試設置AutoGenerateColumns="False"

第三點 :正如@Rover已經說過的,嘗試將類型datagridRows設置為ObservableCollection<CommGDDataSource>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM