| Autor |
Beitrag |
ebber
      
Beiträge: 239
Erhaltene Danke: 1
Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
|
Verfasst: Mi 09.11.11 12:44
Hallo,
ich habe eine WPF Listbox in der, in einem Item, unter anderem ein Button ist. Die Daten sind gebinded.
Nun habe ich es aber nicht geschafft bei einem Button Click auf das Item zurückzuschließen. Ich suche also entweder den Index oder das gebindete Element.
Leider ist nach einem Button Click nicht das Item der Listbox ausgewählt.
MfG
|
|
Th69
      

Beiträge: 4807
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 09.11.11 13:12
Hallo,
du könntest über das 'sender'-Objekt (welches deinem Button entspricht) mittels der Parent-Eigenschaft auf dein Item zugreifen (bzw. hochiterieren).
Beachte, daß du explizit auf das Control bzw. FrameworkElement casten mußt (Stichwort: as).
|
|
ebber 
      
Beiträge: 239
Erhaltene Danke: 1
Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
|
Verfasst: Mi 09.11.11 15:46
Das hatte ich schon versucht, aber ich glaube nicht, dass das geht:
C#-Quelltext 1: 2:
| var ss = (sender as Button).Parent; var sss = (ss as StackPanel).Parent; |
Über dem Button ist ein StackPanel, allerdings hat das kein Parent mehr!? Es kommt zumindest sss = null raus.
|
|
Th69
      

Beiträge: 4807
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 09.11.11 19:49
Hallo ebber,
laut dem letzten Beitrag in www.xing.com/net/net...temtemplate-21846640 muß man den VisualTree heraufwandern:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private DependencyObject GetNextVisualParentOfType(DependencyObject startObject, Type type) { DependencyObject parent = startObject; while (parent != null) { if (type.IsInstanceOfType(parent)) break; else parent = VisualTreeHelper.GetParent(parent); } return parent; } |
Aufruf dann in etwa so:
C#-Quelltext 1:
| ListBoxItem currentListBoxItem = GetNextVisualParentOfType(sender, typeof(ListBoxItem)) as ListBoxItem; |
War nur der falsche Parent, den ich dir genannt habe 
|
|
ebber 
      
Beiträge: 239
Erhaltene Danke: 1
Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
|
Verfasst: Mi 09.11.11 20:27
Danke, die Funktion funktioniert mit:
C#-Quelltext 1: 2:
| ListBoxItem currentListBoxItem = GetNextVisualParentOfType(sender as Button, typeof(ListBoxItem)) as ListBoxItem; var dataContext = currentListBoxItem.DataContext; |
Allerdings bin ich dabei auf eine andere Lösung gestoßen, die um einiges einfacher scheint:
C#-Quelltext 1: 2:
| Button button = sender as Button; var dataContext = button.DataContext; |
komisch, dass das auch funktioniert.
Aufjedenfall bekomme ich auf beide Weisen meine gebindete Klasse zurück.
Danke.
MfG
|
|
ujr
      
Beiträge: 102
Erhaltene Danke: 12
|
Verfasst: Do 10.11.11 10:02
ebber hat folgendes geschrieben : |
C#-Quelltext 1: 2:
| Button button = sender as Button; var dataContext = button.DataContext; |
komisch, dass das auch funktioniert.
Aufjedenfall bekomme ich auf beide Weisen meine gebindete Klasse zurück.
|
Das ist überhaupt nicht komisch, sondern liegt im Prinzip der WPF-Datenbindung.
Und wenn Du, anstatt mit dem Click-Ereignis, mit Button.Command und MVVM-Muster (Model-View-ViewModel) arbeitest, wirst Du sehen, dass Du noch viel einfacher an Deine gebundene Klasse kommst.
Für diesen Beitrag haben gedankt: Kha
|
|
ebber 
      
Beiträge: 239
Erhaltene Danke: 1
Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
|
Verfasst: Do 10.11.11 13:54
Mir scheint WPF ist fast mehr zu lernen als C#. Wobei man ja schon fast auf C# verzichten kann. Man denke nur mal an Schleifen zur Datendarstellung
Wobei ich mich dann frage wieso überhaupt jemand mit etwas anderem arbeitet, wenn man sieht was alles mit WPF & .NET möglich ist.
|
|