Hallo,
wie löst ihr es, wenn ihr im ComboBox.SelectionChanged wissen wollt, ob das SelectionChanged ausgelöst wurde,
-> indem der Benutzer einen anderen Wert ausgewählt hat oder ob
-> es ausgelöst wurde, weil sich die Daten im Code geändert haben.
Sowohl in sender als auch e habe ich kein Unterschied feststellen können.
Besten Dank!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Ich mache solche Sachen meist über eine Klassenvariable. Zum Beispiel
bool IsManualFired;
private myMethod()
{
IsManualFired = true;
//hier der Code um die ComboBox zu manipulieren
IsManualFired = false;
}
Dann halt in Deiner SelectionChanged-Methode prüfen, ob die Variable true oder false ergibt und darauf dann entsprechend reagieren.
Hallo Xalir,
das ist bislang auch meine Lösung. Leider ist es nicht besonders elegant und wenn man später einmal mit mehreren Threads arbeitet, kann es sein, dass es zwischendurch umgeschalten wird.
Ich kenne es von anderen Programmiersprachen, dass es dort dafür sogar zwei unterschiedliche Events gibt.
Gibt es vielleicht noch Ideen? Hat das Microsoft vergessen?
Besten Dank!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Mir ist keine andere Methode bekannt, die es besser löst. Und es gibt auch keine unterschiedlichen Events dafür. Beim Multithreading könnte dies helfen
private void MethodWhichFiresEvents (Action myAction)
{
IsManualFired = true;
myAction();
IsManualFired = false;
}
private void DoStuff()
{
MethodWhichFiresEvents(() =>
{
cmbList.Children.Add(new ComboBoxItem());
});
}
Hi m.grauber,
Sowohl in sender als auch e habe ich kein Unterschied feststellen können.
Es gibt keinen Unterschied, und ich kann mir ehrlich gesagt auch keinen Anwendungsfall vorstellen, wo man die Unterscheidung benötigen würde. Was genau hast du denn vor, daß du das unterscheiden mußt? Evtl. kann man etwas am Programmaufbau ändern, damit man sich die Überprüfung sparen kann.
Christian
Weeks of programming can save you hours of planning
Hallo Christian!
Inzwischen bin ich wieder da.
Das gleiche Problem habe ich jetzt mit einer Checkbox. Auch hier muss ich unterscheiden:
Sobald die Checkbox gecheckt ist, soll IMMER ein bestimmter Text ausgegeben werden und verschiedenes am Layout geändert werden.
Das soll immer passieren (also wenn der Benutzer die Checkbox anklickt und auch wenn beim Laden der DataContext gesetzt wird)
Klickt der User aktiv die Checkbox an, um sie umzustellen, soll noch eine zusätzliche Abfrage z. B. per MessageBox erfolgen. - Diese soll natürlich beim Laden nicht geöffnet werden, da ja nur der letzte Zustand wiederhergestellt werden soll und der User ja bereits diese Messagebox ggfls. angeklickt hatte.
Somit muss ich unterscheiden können, ob der User geklickt hat oder ob sich nur der DataContext geändert hat.
Wenn ich nun sehr viele Checkboxen und Comboboxen habe, muss es doch möglich sein, diese Unterscheidung zu treffen, ohne dass ich noch für jede Combobox und Checkbox ein manuelles IsManualFired einbaue?
(Irgendwie müsste man das ja im "sender" oder "e" sehen, ob es der DataContext ist oder ein Mausklick oder Return-Taste etc. - Ich habe aber alles verglichen - ohne den Unterschied zu finden.)
Danke
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Hallo!
Hat irgend jemand noch eine Idee? X(
Das muss man doch herausfinden können!?
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Hi,
willst du das unbedingt mit Eventhandlern lösen?
So wie ich das verstehe, bewegst du dich im Codebehind (korrigier mich, falls ich falsch liege 😉 ).
Hast du dich schonmal mit MVVM und Binding befasst?
Ich denk damit kannst du das besser lösen.
Der Text, der ausgegeben werden soll, wenn die Checkbox "checked" ist, steht in einem Label, oder wo soll der angezeigt werden?
Weil das kannst auch mit Binding lösen.
Gruß
Florian
Hallo Florian,
vielen Dank.
Sagen wir wir haben die Tabelle1 und darin die Felder Checkwert1 bis Checkwert 10. Der aktuelle Datensatz ist bereits per Binding gebunden.
PropertyChanged ist auch bereits für den Datensatz abonniert. Es wirkt sich aber derzeit auf den gesamten Datensatz aus.
Im Fenster ist es notwendig, das Checkwert1 an mehreren verschiedenen Stellen geändert wird (abhängig von anderen Parametern). Aber nur wenn Checkwert1 durch manuelles Anklicken der Checkbox1 geändert wird, soll eine Messagebox geöffnet werden und weiterer Code abgearbeitet werden. Ich kann mich also nicht rein auf das Checkwert1-PropertyChange stützen. Daher am besten der Ansatz direkt über das Checkbox-Control.
Das muss doch möglich sein? Ich verstehe nicht, wieso Microsoft das so kompliziert gemacht hat?
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Und wenn du einfach die Messagebox in eine eigene Methode packst, die boolean zurückgibt?
Dann musst du nur in dieser Methode auf IsManualFired prüfen (also 1 mal, evtl. musst du halt noch den TextBox.Text mitgeben) und kannst, wenn du es aus dem Code änderst einfach true zurückgeben.
Hallo m.grauber,
so ein langer Thread, für etwas, was in der FAQ bereits abschließend beantwortet wurde, siehe [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung.
Das Argument Multithreading greift nicht, denn das GUI ist per se Single-Threaded. Den Zugriff auf die ComboBox muss man sowieso im GUI-Thread ausführen (siehe [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)) und das das Umsetzen der bool-Variable macht man sowieso direkt vor und nach dem Zugriff, also auch im GUI-Thread. Es gibt in dieser Hinsicht also überhaupt kein Problem.
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.
herbivore