Autor Beitrag
sworddancer
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 15.11.07 10:55 
Hallo zusammen,

Bin auf ein Problem gestoßen wo ich nicht weis wie ich es umgehen soll.
In meinem Programm habe ich eine ListView die mehrere Einträge enthält. Die Anzahl der Einträge ist so groß das ich an der rechten Seite einen Scrolbar bekomme. Die listview zeigt nur einen teil der Daten an. Durch Doppelclick auf ein item möchte ich ein Fenster öffnen das genauere Informationen zu dem item angibt. Dazu habe ich mich auf das MouseDoubleClick Event registriert. Das Anzeigen funktioniert alles ohne Probleme leider ist der MouseDoubleclick für die ganze ListView Komponente zuständige. Das heißt wenn ich bei meinem Scrollbar auf den Pfeil nach unten schnell klicke öffnet es das Fenster auch obwohl ich eigentlich scrollen wollte. Jetzt wollte ich mal fragen wie ihr das Problem lösen würdet oder es einen Workarround dafür gibt.
Vielen dank schon mal im voraus.

MFG
sworddancer<
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 15.11.07 13:19 
ListViewItem kennt das Event auch, hänge deinen Eventhandler also einfach direkt in die Items ein (je nachdem, wie du sie erstellst - bei einem DataTemplate müsstest du nur das Event-XML-Attribut aus der ListView einfügen).
sworddancer Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 15.11.07 14:25 
Leider habe ich in der ListView keine ListViewItems drinnen. Tut mir leid hatte ich wohl vergessen zu erwähnen. Meine ListView bezieht ihre daten aus einer CollectionViewSource welche wiederum ihre Daten von einer Selbsgeschreibenen Klasse die von ObservableCollection<T> abgeleitet ist bezieht. In der Collection View source wiederum sind Objecte die das Interface IPropertyChange implementieren abgeleitet. Die Datendarstellung mache ich nicht über ein Datatemplate sondern ich benutze ein Grid in welches ich per GridViewColumn Spalten mit den dazugehörigen BindingPath hinzufüge.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public static void createColumn(GridView grid, string header, string bindPath, int width)
{
  //create the Bindings for the columns
  GridViewColumn column = new GridViewColumn();
  column.Header = header;
  column.Width = width;
  Binding bind = new Binding();
  bind.Path = new PropertyPath(bindPath);
  column.DisplayMemberBinding = bind;
  grid.Columns.Add(column);
}

Das Grid wird dann später dem ListView übergeben.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 15.11.07 23:47 
Bah, ich denke mal wieder viel zu kompliziert :mrgreen: .
ausblenden XML-Daten
1:
2:
3:
4:
5:
<ListView.Resources>
                    <Style x:Key="{x:Type ListViewItem}" TargetType="ListViewItem">
                        <EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick" />
                    </Style>
                </ListView.Resources>

Fertig ist die Laube.
Du hast zwar gesagt, keine ListViewItems zu benutzen, letzendlich wird aber jedes Item in einer ListView darin gewrappt - dafür sind die Dinger schließlich da ;) .
sworddancer Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 16.11.07 09:46 
Danke für die Hilfe Khabarakh,

funktioniert jetzt. Zwar wird derzeit das neu geöfnete Fenster sofort hinter das bereits offene gelegt wodurch ich es erst durch klicken auf die taskleiste öffnen kann aber ich hoffe ich finde den Fehler. Vielen danks nochmals für die Hilfe

MFG Sworddancer