Laden...

WpfControl (userControl) in WinForm verwenden (Eventanmeldung per Lambda-Expression)

Erstellt von oehrle vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.315 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 7 Jahren
WpfControl (userControl) in WinForm verwenden (Eventanmeldung per Lambda-Expression)

Hallo, ich habe das folgende Problem:

In einer bestehenden WinForm-Anwendung binde ich ein Projekt das mit WPF erstellt ist ein.
Es handelt sich um ein Tool um Daten zu filtern. Nun funktioniert das auch, die Eingabe reagiert auch (was zuerst ein Problem war).

Nun bin ich es gewohn dass ich in WPF im Code manchmal die Events mit direkt mit Lambda-Expression ausstaffiere (geht schnell und übersichtlich). Das wollte ich jetzt mit dem WpfControl in der WinForm-Appliaktion machen. Leider werden nicht alle Eventhandler angesprungen. Habe schon eine ganze Zeit im Netz gesucht, leider aber nichts brauchbares gefunden.
Hat jemand einen Tipp wie ich das machen kann (oder geht das gar nicht) ?

Hier mal mein Code:



  FilterWindow wnd = new FilterWindow(tblMaterialRohkoerper, 1);
            ElementHost.EnableModelessKeyboardInterop(wnd);
            wnd.stp_Zusatzeingaben.Visibility = Visibility.Visible;
            WindowInteropHelper helper = new WindowInteropHelper(wnd);
            helper.Owner = this.Handle;

            string pwzMaterial = "";

  //// Eventhandling, dieser funktioniert !!
  wnd.btn_Datenuebernahme.Click += (sender, args) =>
            {
                tbx_SapMaterial.Text = wnd.tbx_Zusatzeingabe.Text.Trim();
                tbx_PwzMaterial.Text = pwzMaterial;
                wnd.Close();
            };


//// Eventhandling, das niicht funktioniert. Hängt das mit dem unbekannten "DataGrid" für WinForm zusammen ??
wnd.dgFilterdaten.MouseDoubleClick += (sender, args) =>
            {
                if(sender is DataGrid)
                {
                    System.Windows.Controls.DataGrid dgDaten = (System.Windows.Controls.DataGrid) sender;
                    if (wnd.stp_Zusatzeingaben.Visibility == Visibility.Visible)
                    {
                        var xx = dgDaten.Columns.AsEnumerable().Where(x => x.Header.ToString() == "SapMaterial").FirstOrDefault();
                        if (xx != null)
                        {
                            string materialRohkoerper = ((DataRowView)(dgDaten.CurrentItem))["SapMaterial"].ToString();
                            wnd.tbx_Zusatzeingabe.Text = materialRohkoerper;
                            tbx_SapMaterial.Text = materialRohkoerper;

                            //// Z-Artikelcode auslesen
                            if(((DataRowView) (dgDaten.CurrentItem))["ARTCODE"] != DBNull.Value && ((DataRowView) (dgDaten.CurrentItem))["ARTCODE"].ToString().Trim() != "")
                            {
                                zMaterial = ((DataRowView) (dgDaten.CurrentItem))["ARTCODE"].ToString().Trim();
                                tbx_zMaterial.Text = zMaterial;
                            }
                        }

                    }
                }
            };





            wnd.Show();



S
506 Beiträge seit 2006
vor 7 Jahren

Geht denn das "wnd.dgFilterdaten.MouseDoubleClick"-Event wenn du es klassisch mit einer Methode verbindest?

Könnte mir vorstellen dass das MouseDoubleClick einfach nicht aufgerufen wird.

1.040 Beiträge seit 2007
vor 7 Jahren

Breakpoint auf das if und dann schauen, ob ein MouseDoubleClick überhaupt ausgelöst wird.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 7 Jahren

Ne, wird nicht angesprungen. Hatte ich schon getestet.

5.658 Beiträge seit 2006
vor 7 Jahren

Hi oehrle,

ich bezweifle ja, daß es an der Art der Zuweisung des EventHandlers liegt. Wird denn der EventHandler aufgerufen, wenn du ihn stattdessen in eine eigene Methode auslagerst?

Weeks of programming can save you hours of planning