DataGrid не обновляет строки из объекта List (of) - PullRequest
0 голосов
/ 20 февраля 2012

У меня уже был этот материал, работающий в другом проекте, но теперь это не так.Я понятия не имею, почему.

  1. Установить DataGrid ItemsSource равным {Binding}
  2. Создать новый список (из myclass)
  3. Создать публичный список Dim MyList As New List(of myclass)
  4. Привязка DataGrid.DataContext = MyList при создании экземпляра
  5. Задание определений столбцов DataGrid для некоторых элементов в свойствах myclass

Я добавил свой первый класс в список MyList.Add(New myclass()) сейчасэтот элемент виденно после создания экземпляра и после того, как сетка данных становится видимой, строки не обновляются.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 Ответ

1 голос
/ 20 февраля 2012

используйте ObservableCollection (из myclass) вместо списка.вы увидите изменения при добавлении или удалении элементов.

РЕДАКТИРОВАТЬ

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