DataGrid不会更新List(of)对象中的行

时间:2012-02-20 11:39:13

标签: .net wpf data-binding binding properties

我已经将这些东西用于另一个项目,但现在却没有。 我不知道为什么。

  1. 将DataGrid ItemsSource设置为{Binding}
  2. 创建新列表(myclass)
  3. 创建公开列表Dim MyList As New List(of myclass)
  4. 创建实例时绑定DataGrid.DataContext = MyList
  5. 将DataGrid列定义设置为myclass属性
  6. 上的某些项目

    我在列表中添加了第一堂课 MyList.Add(New myclass()) 现在,这个项目是可见的。但是在创建实例之后并且在datagrid可见之后,行不会更新。 MyList.Add(New myclass())并且没有第二行可见。

    只有这样做 MyDataGrid1.Items.Refresh 项目已正确更新。 但据我所知,List(of)类已包含INotifyPropertyChanged接口。

    任何想法失败的原因?

    这里有一些额外的代码

                                                                                                         

            <DataGrid.Columns>
                <DataGridTextColumn         Header="N°"                 Binding="{Binding Path=LineNumber, StringFormat='{}{0:000}'}"           Width="SizeToCells"     MinWidth="30" IsReadOnly="True"  />
    
                <DataGridTextColumn         Header="HEX"                Binding="{Binding HexText}"         Width="SizeToHeader"    MinWidth="80" IsReadOnly="True"  FontWeight="Bold"                    />
                <DataGridTextColumn         Header="TextNormalized"     Binding="{Binding Description}"     Width="*"     MinWidth="80" IsReadOnly="True"  FontSize="12"       />
            </DataGrid.Columns>
        </DataGrid>
    

    一些代码隐藏:

     Private ListData As New List(Of clsHexRowData)
    

    实例:

    Public Sub New()
    
        ' This call is required by the designer.
        InitializeComponent()
    
        Me.dgv.ItemsSource = Me.ListData
        Me.ListData.Clear()
        Dim item As New clsQueueItem
        item.FromString("Hallo")
        Me.AddItem(item)
    End Sub
    

    这是可见的,但在初始化页面后添加新行时,项目不会更新,需要dgv.Items.Refresh,我不明白为什么。

1 个答案:

答案 0 :(得分:1)

使用ObservableCollection(myclass)代替list。添加或删除项目时,您会看到更改。

修改

 //add
 Application.Current.Dispatcher.BeginInvoke((Action)(()=> { Me.ListData.Add(new Item());}))