我已经将这些东西用于另一个项目,但现在却没有。 我不知道为什么。
{Binding}
Dim MyList As New List(of myclass)
DataGrid.DataContext = MyList
我在列表中添加了第一堂课
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
,我不明白为什么。
答案 0 :(得分:1)
使用ObservableCollection(myclass)代替list。添加或删除项目时,您会看到更改。
修改
//add
Application.Current.Dispatcher.BeginInvoke((Action)(()=> { Me.ListData.Add(new Item());}))