Laden...

Wie kann ich den Datacontext an EventHandler weiter geben

Erstellt von Kriz vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.468 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 7 Jahren
Wie kann ich den Datacontext an EventHandler weiter geben

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

T
461 Beiträge seit 2013
vor 7 Jahren

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... 😄

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 7 Jahren

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?

5.658 Beiträge seit 2006
vor 7 Jahren

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

F
10.010 Beiträge seit 2004
vor 7 Jahren

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.

L
136 Beiträge seit 2015
vor 7 Jahren

Hallo Kriz,

Da kann ich FZelle nur zustimmen...wird über die Bindings in xaml viel einfacher.
Ich, Hobby- CSharpler 😁

Gruss Lhyn