więc podstaw: Mam okno z ListView na nim, który jest wypełniany przez datacontext mojego Grid:ListView Binding z DataTable, nie aktualizowanie po usunięciu wiersza
mainGrid.SetBinding(Grid.DataContextProperty,
new Binding() {
Source = new DataView()
{ Table = SQLHandler.GetHandler[classType.ToString()] }
}
);
w XAML:
<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}">
wszystko działa poprawnie, jest wypełnione. Jak widać powyżej, mam klasę SQLHandler, do której dostęp ma Singleton, i mogę uzyskać dostęp do moich tabel za pomocą narzędzia indeksującego.
Problem: okno ładuje się, wybieram wiersz, klikam przycisk Edytuj, nowe okno ładuje się, gdzie otrzymuję szczegóły wybranego wiersza. kiedy usuwam ten wiersz przez to nowe okno i zamykam go, okno główne (gdzie pokazane jest pełne zestaw danych) nie jest odpowiednio aktualizowane. wiem, jakie powinno być rozwiązanie, ale nie mogę tego zrobić. (inotifyproperty zmienił interfejs na SqlHandler, Binding.IndexerName itp.)
o to, co najważniejsze: zbiór danych nie znajduje się w mojej klasie SqlHandler, jest w SqlExecuter, gdzie wykonywane są wszystkie moje sqlcommands.
public override DataTable this[string key]
{
get
{
if (sqlExecuter.GetDataSet.Tables.Contains(key))
return sqlExecuter.GetDataSet.Tables[key];
throw new KeyNotFoundException("The specified key was not found");
}
}
gdzie GetDataSet jest:
public DataSet GetDataSet
{
get { return ds; }
}
Jak mogę dokonać tej pracy? Kiedy usuwam wiersz w innym oknie i zamykam go, lista widoków głównego okna nie aktualizuje się. Jedyną dostępną opcją jest wstawienie przycisku odświeżania, a następnie ponowne powiązanie właściwości datacontekstu, a następnie oczywiście, że działa, ale moim celem jest posiadanie "żywego" systemu aktualizacji, w końcu to jest Binding.
Co wypróbowałem: GetDataSet w SqlExecuter: zaimplementował interfejs inotifypropertyfikacji, ale nic się nie zmieniło. i nie mogę mieć inotifypropertychicznie zaimplementowane na moim indeksatorze w SqlHandler, ponieważ nie ma on ustawiacza, zawsze uzyskuję dostęp tylko do tabel z kodu źródłowego, mój sqldataadapter je zapełnia (metoda wypełniania)
ps : tak naprawdę nie planuję tworzenia ObservableCollection, ponieważ 90% mojego kodu powinno zostać przepisane, a kiedy usunę wiersz, wyczyściłem mój zestaw danych i uzupełniłem go ponownie, więc nawet nie spodziewam się, że zauważy każdą zmianę , kiedy tylko napełnić moje DataTable, mój ListView powinien wiedzieć o tym .. i odświeżyć sobie