Problem jest następujący:
W Visual Studio dodałem sobie listę - element ListView
w której, przy elementach, wyświetlam checkboxy. Kod działa w taki sposób, że po kliknięciu na checkbox odpala się event ItemChecked
dzięki czemu dane o zaznaczeniu o liście zapisują się do pliku. Wszystko ładnie pięknie działa, event jest podczepiony, ale.. odpala się również po dodaniu elementu do listy - nie chcę by się w takiej sytuacji odpalał, ponieważ lista zapisuje się kilkaset razy przy wczytywaniu (tyle ile jest elementów) :/
Szukam rozwiązania problemu od wielu godzin, i jedyne co znalazłem, to by stosować prostą flagę, odczytując ją w evencie i tym samym sterując jego zachowaniem. Dodałem więc flagę private bool _loading
widoczną w poniższym kodzie. Teoretycznie powinno działać. Jednak nie działa jak powinno.
class GridView {
private bool _loading;
public void Add(ListViewItem item) {
// TODO: walidacja danych
gridListView.Items.Add(item);
}
public void LoadData(List<ListViewItem> gridItems) {
this._loading = true;
Debug.Write("_loading = true\n");
foreach (ListViewItem gridItem in gridItems) {
this.Add(gridItem);
}
this._loading = false;
Debug.Write("_loading = false\n");
}
private void gridListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
if (!this._loading) {
Debug.Write("ItemChecked! _loading == false\n");
// TODO: Zapisywanie danych do pliku
} else {
Debug.Write("ItemNOTChecked! _loading == true\n");
}
}
}
Efekt wykonania powyższego kodu jest następujący:
_loading = true
_loading = false
ItemChecked! _loading == False
ItemChecked! _loading == False
ItemChecked! _loading == False
ItemChecked! _loading == False
ItemChecked! _loading == False
ItemChecked! _loading == False
(...)
a powinno być:
_loading = true
ItemNOTChecked! _loading == True
ItemNOTChecked! _loading == True
(...)
_loading = false
Czyli, wygląda na to, że flaga _loading
zostaje natychmiast ustawiona na false, mimo, że jeszcze nie dodało elementów do ListView
.
**Czy jest więc sposób, by event ItemChecked
nie odpalał się podczas dodawania elementów do ListView
, lub czy może istnieje jakiś argument do tego dla warunku If
wewnątrz metody gridListView_ItemChecked
**