Cześć.
Mam problem z przeładowaniem danych w DataGrid.
We ViewModelu zdefiniowałem i zainicjalizowałem zmienną typu ObservableCollection.
W ViewModelu oczywiście odziedziczyłem inną klasę która sama dziedziczy z INotifyCollectionChanged oraz implementuje medotę NotifyCollectionChanged.
Zbindowałem ItemSource do zmiennej.
public ObservableCollection<RouteUserDocumentPosition> zmienna
{
get => routes;
set
{
routes = value;
base.NotifyCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedAction.Add);
}
}
protected void NotifyCollectionChanged(NotifyCollectionChangedAction action , [CallerMemberName]string propertyName = "")
{
switch(action)
{
case NotifyCollectionChangedAction.Reset:
this.CollectionChanged?.Invoke(this , new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
break;
case NotifyCollectionChangedAction.Add:
this.CollectionChanged?.Invoke(this , new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add , propertyName));
break;
}
}
<DataGrid
x:Name="DataGrid"
Margin="0,0,0,0"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
ItemsSource="{Binding zmienna}">
Niestety przy przeładowaniu danych w ObservableCollection nie widzę żadnych zmian na widoku, a powinienem zauważyć zmianę koloru wiersza.
await Application.Current.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(() =>
{
foreach (RouteUserDocumentPosition document in documentsPositions)
zmienna.Add(document);
base.NotifyCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedAction.Add);
}));
Na początku podejrzewałem że może być wymagane operowanie na głównym wątku. Następnie że jednak ObservableCollection nie zauważa zmiany. Teraz już nie mam pomysłu.
Co może być powodem nie przeładowywania zmiennych?