Czy istnieje prosta metoda, aby poprosić użytkownika o potwierdzenie zmiany wyboru pola kombi i nie przetworzyć zmiany, jeśli użytkownik wybrał opcję nie?Jak anulować zdarzenie ComboBox SelectionChanged?
Mamy pole kombi, w którym zmiana wyboru spowoduje utratę danych. Zasadniczo użytkownik wybiera typ, a następnie jest w stanie wprowadzić atrybuty tego typu. Jeśli zmienią typ, usuniemy wszystkie atrybuty, ponieważ mogą one już nie mieć zastosowania. Problem polega na tym, że pod wyborem ponownie podnosisz zdarzenie SelectionChanged
.
Oto fragment:
if (e.RemovedItems.Count > 0)
{
result = MessageBox.Show("Do you wish to continue?",
"Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.No)
{
if (e.RemovedItems.Count > 0)
((ComboBox)sender).SelectedItem = e.RemovedItems[0];
else
((ComboBox)sender).SelectedItem = null;
}
}
Mam dwa rozwiązania, z których żaden nie lubię.
Po użytkownik wybiera „nie”, usuń obsługi
SelectionChanged
zdarzeń zmienić wybrany element, a następnie ponownie zarejestrować obsługiSelectionChanged
zdarzeń. Oznacza to, że musisz trzymać referencję obsługi zdarzeń w klasie, aby móc ją dodawać i usuwać.Utwórz boolean
ProcessSelectionChanged
jako część klasy. Zawsze sprawdzaj to na początku programu obsługi zdarzeń. Ustaw go na false, zanim zmienimy wybór, a następnie zresetujemy go do wartości true. To zadziała, ale nie lubię używać flag, aby w zasadzie unieważnić obsługę zdarzeń.
Ktoś ma alternatywne rozwiązanie lub ulepszenie tych, o których wspomniałem?
To stary ale http://stackoverflow.com/questions/314503/how-to-prevent-cancel-a-comboboxs-value-change-in-c pomóc? –
Chciałem powiedzieć, dlaczego nie używałeś javascript, aby to sprawdzić, ale potem zauważyłem jego winform app sorry :(. – JonH
Flaga bool jest standardowym rozwiązaniem.Nie daje użytkownikowi sposobu na wybranie pozycji, po prostu nie włączając jej w kolekcji Przedmiotów jest dobrym rozwiązaniem –