0

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は、データが入力される前であっても、空の行を事前に生成します。アイテムで埋められた行のみを表示できるようにしたい(そして最後に埋められた行の下部に新しい行を追加したい)。どうすればこれを達成できますか?

4

2 に答える 2

6

List<> の代わりに ObservableCollection<> を使用し、dataGridRows をパブリックにします。

于 2012-07-23T09:07:25.993 に答える
1

さて、私が最初dataGridRowsに驚いたのは、プライベートフィールドです。私が間違っていなければ、プライベートフィールドにバインドすることはできず、パブリックプロパティにすることをお勧めします(間違っている場合は修正してください)。

私を悩ませている2番目のことはAutoGenerateColumns="True"、グリッドがどのように機能するかわからず、列が明示的に指定されていることです。設定してみてください。 AutoGenerateColumnsTrueAutoGenerateColumns="False"

そして3つ目:@Roverがすでに言ったように、タイプdatagridRowsを に設定してみてくださいObservableCollection<CommGDDataSource>

于 2012-07-23T09:02:37.173 に答える