Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

24.11.2013, 20:18

C#-Wpf - Eventhandler UserControl

Hallo Community,

ich habe ein StackPanel, dem ich zur Laufzeit beliebig viele Items hinzufüge, diese sind selbst erstellte UserControls. Hier mal ein Beispiel:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private int anzItems = 0;
  public void TestItemsHinzufuegen() //Wird öfter aufgerufen
        {   anzItems++;
    MailItem mItem = new MailItem ();
    mItem.Height = 50;
mItem.Nummer = anzItems;
    mItem.Width = stackPanel1.Width;
    mItem.button1.Click += new RoutedEventHandler(Onb1Click);
    stackPanel1.Children.Add(mItem);
        }

        void Onb1Click(object sender, RoutedEventArgs e)
        {
    //Wie erfahre ich hier mItem.Nummer?
        }

Wie stelle ich nun fest, welches Control angeklickt wurde?

Danke schon mal für eure Hilfe.

Gruß,
MitgliedXYZ

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

2

24.11.2013, 21:31

Indem du sender in ein MailItem castest würde ich behaupten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

25.11.2013, 06:40

Mal 'ne Frage: Wieso fügst Du die manuell dem Panel hinzu? WPF bietet für so etwas extra das ItemsControl an. Dann lässt sich das Ganze wunderbar einfach über eine Property vom Typ ObservableCollection<DeinViewModel> und ein ItemsControl im XAML lösen. Die Konstruktoren und manuellen Handler-Zuweisungen kannst Du Dir damit sparen und vor allem übernimmt WPF das für Dich. Speziell die Deregistrierung vergisst man ab und zu mal und bekommt dadurch böse Memory-Leaks.
Vor allem aber ist es irgendwie relativ unelegant direkt mit einem UserControl im Code behind zu arbeiten statt mit einem ViewModel im parent-ViewModel.

Casten kann man da übrigens nicht, weil der sender kein MailItem ist, sondern der Button. Man müsste also in Button casten und dann das MailItem suchen, welches diesen Button hat. Nicht sehr hübsch.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (25.11.2013, 08:51)


TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

25.11.2013, 07:38

Das Thema hatten wir schonmal. MVVM mag er anscheinend nicht :).

EDIT: Ich kann auch nur noch einmal betonen, dass du WPF da ziemlich "vergewaltigst". Bitte schaue dir an, wie man mit DataBindings und ViewModels arbeitet. Du wirst dein Leben ungemein bereichern!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrommlBomml« (25.11.2013, 07:43)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

25.11.2013, 08:43

Falls es am Verständnis hängt, können wir ja auch gern dafür ein kleines Beispiel machen ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

25.11.2013, 08:48

Das habe ich sowieso schon lange überlegt, z.B. durch erstellen eines Wiki-Eintrags. Finde nur dass es schwierig in das Thema Spiele-Entwicklng passt.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

25.11.2013, 13:39

Das kommt ja drauf an wie weiträumig man Spieleentwicklung betrachtet. Tools und Editoren müssen ja manchmal auch erstellt werden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

8

25.11.2013, 18:42

Ja, ich glaube ich hatte schon mal so eine ähnliche Frage gestellt, aber es immer noch nicht richtig verstanden.
Über ein Beispiel, dass in Richtung hinzufügen CustomControlls zur Laufzeit mit Button-Click-Ereignis-Abfrage, oder wie auch immer das korrekt genannt wird, wäre ich euch sehr dankbar.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

25.11.2013, 19:13

Das geile ist, dass du mit MVVM keine Controls direkt instanziieren musst, sondern nur mit deinen Objekten arbeitest :). Das ist ziemlich konfortabel und dadurch sogar automatisch testbar. Ich ringe mich durch und werde demnächst mal ein WPF-Tutorial erstellen. Lieber BlueCobold, von dir erwarte ich starke Kritik und Mithilfe :P

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

25.11.2013, 19:22

Joar, na kein Problem. Wenn's bis morgen früh noch keiner gemacht hat, versuch ich das mal ein passendes Beispiel mit etwas erklärendem Text rundrum. Heute komme ich aber nicht mehr dazu. Zumindest konkret zu diesem Thema, kein allzu generelles WPF-Tutorial.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (25.11.2013, 20:41)


Werbeanzeige