1

ObservableCollectionseiveDataオブジェクトであるクラス「Seive」があります。

        public Seive(String id)
    {
        SeiveIdSize = id;
        Caret = 0.0;
        Percent = 0.0;
        Peices = 0;
        Weight = 0.0;
        Size = 0;
    }

    public String SeiveIdSize   {    get;   set;   }
    public Double Weight { get; set; }
    public Double Percent   {    get;   set;   }
    public Double Caret {    get;   set;   }
    public uint Size    {    get;   set;   }
    public uint Peices  {    get;   set;   }

私のxmlで:私は持っています

<DataGrid  Name="serverGrid" ItemsSource="{Binding}" .....>
<DataGrid.Columns>
<DataGridTextColumn Header="SEIVE" Width="Auto" Binding="{Binding Path=SeiveIdSize}" SortDirection="Ascending" />
 <DataGridTextColumn Header="CTS" Width="Auto" Binding="{Binding Path=Caret}" />
 <DataGridTextColumn Header=" % " Width="Auto" Binding="{Binding Path=Percent}" />
 <DataGridTextColumn Header="PCS" Width="Auto" Binding="{Binding Path=Peices}" />
 <DataGridTextColumn Header="WGT" Width="Auto" Binding="{Binding Path=Weight}" />
 <DataGridTextColumn Header="SIZE" Width="Auto" Binding="{Binding Path=Size}" />                                    
 </DataGrid.Columns>

ウィンドウのLoadedイベントで、seiveDataに2つのseiveを入力しましたが、結果/行が表示されません。

seivesData.Add(new Seive("+10"));
seivesData.Add(new Seive("+8"));
seivesDataGrid.DataContext = seivesData;

編集:ボタンイベントコード:

        private void saveBtn_Click(object sender, RoutedEventArgs e)
    {
        Seive s1 = new Seive("+2");
        s1.Peices = 100;
        s1.Caret = 0.41;
        s1.Weight = 0.10;
        seivesData.Add(s1);
        Seive s = seivesData[0];
        s.Caret = 0.54;
        s.Weight = 0.32;
        seivesData[0] = s;
        seiveDG.DataContext = seivesData;
    }

どこが間違っているのですか?新しく追加されたSeiveのすべての詳細を確認できますが、0番目のSeiveに追加されたCaret&Weightは表示されません。

4

4 に答える 4

2

xamlで見られる基本的な問題は、ItemsSource = {binding SeiveData}を設定することです。これは、このプロパティをグリッドのデータコンテキストに渡す場合は間違っています。

この以下のコードは現在機能しています。確認してください。

シャグネをクラスSeiveに通知する場合は、INotifyPropertyChangeインターフェイスを実装する必要があります。

XAML

<DataGrid Name="serverGrid" ItemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTextColumn Width="Auto"
                                Binding="{Binding Path=SeiveIdSize}"
                                Header="SEIVE"
                                SortDirection="Ascending" />
            <DataGridTextColumn Width="Auto"
                                Binding="{Binding Path=Caret}"
                                Header="CTS" />
            <DataGridTextColumn Width="Auto"
                                Binding="{Binding Path=Percent}"
                                Header=" % " />
            <DataGridTextColumn Width="Auto"
                                Binding="{Binding Path=Peices}"
                                Header="PCS" />
            <DataGridTextColumn Width="Auto"
                                Binding="{Binding Path=Weight}"
                                Header="WGT" />
            <DataGridTextColumn Width="Auto"
                                Binding="{Binding Path=Size}"
                                Header="SIZE" />
        </DataGrid.Columns>
    </DataGrid> 

後ろに来る

 ObservableCollection<Seive> _seiveData;
        public ObservableCollection<Seive> SeiveData
        {
            get { return _seiveData; }
            set { _seiveData = value; }
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            SeiveData = new ObservableCollection<Seive>();
            SeiveData.Add(new Seive("+10"));
            SeiveData.Add(new Seive("+8"));

            serverGrid.DataContext = SeiveData;

        }

クラス

 public class Seive
    {
        public Seive(String id)
        {
            SeiveIdSize = id;
            Caret = 0.0;
            Percent = 0.0;
            Peices = 0;
            Weight = 0.0;
            Size = 0;
        }

        public String SeiveIdSize { get; set; }
        public Double Weight { get; set; }
        public Double Percent { get; set; }
        public Double Caret { get; set; }
        public uint Size { get; set; }
        public uint Peices { get; set; }
    }
于 2012-05-17T10:51:02.507 に答える
1

リストを使用しているとのことですが、データバインディングを機能させるにはObservableCollection<T>、コレクションが変更された場合にデータグリッドに通知するを使用する必要があります。

編集:

コメントで指摘されているように、それは変更についてではありません。すでにdatacontextをリストに設定しているので、DataContextにはありませんseiveData。代わりに、次のことを試してください。

ItemsSource="{Binding}"

それでも変更のビューを通知する必要がある場合は、ObservableCollection<T>前述のように検討してください。

于 2012-05-17T10:30:53.030 に答える
0

おそらく、DataGridが入っているコンテナのDataContextは、seiveData-propertyを提供するオブジェクトに設定されていません。あるいは、あなたのseiveDataリストはプロパティに裏打ちされておらず、フィールドにすぎないかもしれません。これは許可されていません。フィールド(メンバー変数)がパブリックとして宣言されている場合でも、バインディングエンジンはそれにバインドしません。これは、プロパティによってサポートされている必要があります。

また、Loaded-eventでリストに入力する場合は、リストの作成前にバインディングが行われるなどの理由で、実装コレクションでseiveListある必要があることに注意してください。そうしないと、DataGridは新しいデータがリストに挿入されたことを認識しません。INotifyCollectionChangedObservableCollection<T>

于 2012-05-17T10:35:38.833 に答える
0

誰もが述べているように、1つの方法はそれをにバインドすることObservableCollectionです。

もう1つの方法は、DataTableからバインドすることです。

を使用してリストをDataTableに変換します

方法:ジェネリック型TがDataRowではない場合にCopyToDataTableを実装する

クエリからのDataTableの作成(LINQからDataSet)

今日これを見つけました。非常に効果的。

于 2012-05-17T10:42:35.663 に答える