2009-09-17 10 views
6

Wyobraź sobie: masz okno Master-Child składające się z listy elementów (okno główne) i zestawu kontrolek, w których możesz edytować aktualnie wybrany element (okienko podrzędne). Okno podrzędne ma przyciski "Zastosuj" i "Anuluj".WPF: Zatrzymywanie lub cofanie zmiany wyboru w polu listy

Użytkownik rozpoczyna edycję wartości. Następnie zmienia wybór, przed naciśnięciem przycisku "Zastosuj".

Twoja aplikacja wyświetla komunikat "Zastosuj zmiany do bieżącego elementu?", Z przyciskami "Tak", "Nie" i "Anuluj". Jeśli użytkownik naciśnie "Anuluj", próba zmiany bieżącego wyboru powinna zakończyć się niepowodzeniem.

Element "CurrentSelection" jest databoundem.

Pomyślałem, że poradzę sobie z tym w części "setera" w obiekcie CurrentSelection. Jeśli użytkownik wybierze opcję "Anuluj", po prostu zatrzymam element CurrentSelection w takiej postaci, w jakiej się znajduje, i wystrzeliwam powiadomienie o zdarzeniu PropertyChanged, aby przekazać formularz do aktualizacji do poprzednio wybranego elementu. Kontrolka ignoruje to zdarzenie powiadomienia. (Co ma sens, Control mówi: "Wiem, że obecny wybór się zmienił, właśnie go zmieniłem!")

Jakieś pomysły, jak to naprawić? Podsumowując, kontrola próbuje zmienić oprawiony SelectedItem i chcę powiedzieć "Nie, nie możesz teraz zmienić tego wybranego elementu".

Odpowiedz

1

Po prostu myśl bez przetestowania: spróbuj wywołać zdarzenie zmienione właściwości w osobnej wiadomości. Lista prawdopodobnie zawiera blokadę, która ignoruje wszelkie powiadomienia podczas zmiany wartości właściwości. Jeśli wyślesz osobną wiadomość, która zawiera powiadomienie, zatrzask powinien zostać zresetowany i powinien go obsłużyć.