Guten Morgen,
folgendes Szenario:
Ich habe ein UserControl mit mehreren Buttons. Datacontext ist ein Objekt der Klasse "Person".
Während der Laufzeit werden in einer foreach-Schleife mehrere dieser Usercontrols erstellt, abhängig davon wie viele "Personen" in einer List<Person> sind.
Wenn nun einer der Buttons in der Usercontrol geklickt wird, soll ein weiteres Fenster geöffnet werden, das den Datacontext übergeben bekommt.
Im Moment bin ich soweit, dass in der foreach-Schleife mit Button.Click += NeueMethode eine Methode gestartet wird, mit der ich das neue Fenster samt Datacontext öffnen möchte, allerdings bekomme ich den Datacontext leider nicht weiter gegeben. Wenn ich Button.Click += NeueMethode(Person) versuche bekomme ich den Fehler dass void nicht in RoutedEventHandler konvertiert werden kann, also hab ich die Signatur meiner NeueMethode mit ( object sender, EventArgs e) angepasst, aber ich bekomme immer noch die Fehlermeldung...
Was muss ich tun???
Vielen Dank für Eure Hilfe!
Kriz
Hallo, vielleicht mal ein kleiner Codeausschnitt des Problems, nämlich genau die Stelle, an der das Event registriert wird UND die EventMethode selbst...
Zudem wäre die Fehlermeldung auch recht Hilfreich, schon alleine für dich selbst, denn meistens trifft sie ja den Nagel auf dem Kopf! 😉
Unter welcher Umgebung entwickelst du?
Grüße
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
public frmWeeklySchedule()
{
InitializeComponent();
this.Height = Settings.GlobalSettings.ListOfEmployee.Count() * 30 + 140;
foreach (var item in Settings.GlobalSettings.ListOfEmployee)
{
Common.EmployeeWeekview newEmployee = new Common.EmployeeWeekview()
{
DataContext = item
};
RowDefinition rwdef = new RowDefinition();
rwdef.Height = GridLength.Auto;
EmployeeGrid.RowDefinitions.Add(rwdef);
EmployeeGrid.Children.Add(newEmployee);
Grid.SetRow(newEmployee, count);
count++;
newEmployee.btnMonday.Click += SelectShift ;
}
}
private void SelectShift( object sender, EventArgs e)
{
frmSelectShift SelectShift = new frmSelectShift();
SelectShift.ShowDialog();
}
-> newEmployee.btnMonday.Click += SelectShift
Wenn ich an dieser Stelle versuche das item weiter zu geben mit ... += SelectShift(item) wird mir schon während dem Tippen angezeigt: "Der Typ "void" kann nicht implizit in "System.Windows.RoutedEventHandler" konvertiert werden."
Wie kann ich also an dieser Stelle ein Item bzw den DataContext weiter geben?
Hi Kriz,
du brauchst eine EventHandler-Methode mit der Signatur die deinem Event entspricht. Dann werden die EventArgs automatisch weitergegeben. Siehe auch die Links in [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)
Weeks of programming can save you hours of planning
Oder den ganzen Mist sein lassen und WPF so benutzen wie es vorgesehen ist.
@Kiz:
Du benutzt WPF so wie man es unter WindowsForms gemacht hätte, das ist der komplett falsche Weg.
Benutze MVVM und z.b. ItemControls mit DataTemplates.
Und wenn du dann noch etwas wie Prism benutzt dann wird das alles viel einfacher.
Hallo Kriz,
Da kann ich FZelle nur zustimmen...wird über die Bindings in xaml viel einfacher.
Ich, Hobby- CSharpler 😁
Gruss Lhyn