Hey Jungs,
Ich bin grade dabei dabei mir aus Spaß nen Twitter Client zu schreiben ... und scheitere grade an einem OnClick Event.
Ich Arbeite mit Bindings, und Events kann man laut Vs Studio 2008 nicht per Binding übertragen.
Das stört mich aber, weil ich für eine ListView für jedes einzelne Element ein OnClick brauche, und diese auch unterschiedlich sein sollen.
Nun gibt es 2 Möglichkeiten:
Entweder ich bekomm' es hin mit Bindings ein Event zu verlinken
Oder(Dass woran ich grade scheitere):
Ich Versuche nach jedem Adden eines Elements das jeweilige neue ListviewItem mit dem ItemContainerGenerator des ListViews zu bekommen.
Dafür reagiere ich mit diesem Snippet auf das Adden eines neuen Elements.
FriendsList.ItemContainerGenerator.StatusChanged += new EventHandler(
(o, ea) =>
{
lock (o)
{
ItemContainerGenerator icg = o as ItemContainerGenerator;
if (icg.Status == GeneratorStatus.ContainersGenerated)
{
ListViewItem litem = icg.ContainerFromIndex(ItemsPlace.Value) as ListViewItem;
lock (Current) litem.MouseDoubleClick += new MouseButtonEventHandler(Current.OnDoubleClick);
}
}
});
Das Problem ist nur, dass litem immer null bleibt, obwohl es ja eigentlich existieren sollte.
ItemsPlace ist eine selbstgeschriebene Synchronisationsklasse, die tut. 😃
Value besitzt seinen Wert.
Und eigentlich sind wir auf dem Thread von FriendsList.
Den ganzen Snippet habe ich durch googeln gefunden, war aber auch die einzige(für mich verständliche Lösung).
Nun, wollte ich fragen, ob ihr mir vielleicht helfen könnt und mir erklären könnt, wie ich an die Elemente rankomme oder einfach via Binding ein Event verlinken kann.
Ich würde mich sehr über eure Tipps und Hilfe freuen! 😃
Hallo Seshiro,
Hmm irgendwie machst Du Dir es ein wenig schwer, das ganze geht doch eigentlich sehr Einfach.
mal zwei kurze Beispiele
per Attached Event
<ListView ListViewItem.MouseDoubleClick="OnDoubleClick" ...>
...
<ListView/>
oder
über einen Style
<ListView >
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="ListViewItem.MouseDoubleClick" Handler="ListView_MouseDoubleClick"/>
</Style>
</ListView.Resources>
</ListView>
wobei der Erste Weg vorzuziehen ist.
Herzliche Grüße
Lars
Geht das ganze auch mit Bindings, dass ist nämlich das große Problem, weil ich eben 2-3 verschiedene OnClicks verwenden will/muss ...
€:
<ListView ItemsSource="{Binding}" Name="FriendsList" Margin="0,0,0,-5">
<ListView.View>
<GridView>
<!-- -->
<GridViewColumn Width="100" Header="User" CellTemplate="{StaticResource UsernameTemplate}"/>
<GridViewColumn CellTemplate="{StaticResource PhotoTemplate}" Width="100" Header="Pic" DisplayMemberBinding="{Binding Path=Icon}"/>
<GridViewColumn Width="200" Header="Message" CellTemplate="{StaticResource TextBoxTemplate}"/>
<!--<GridViewColumn Width="100" Header="Actions" ></GridViewColumn>-->
</GridView>
</ListView.View>
</ListView>
Bei dem Snippet tut es leider nicht -.-'
Wieso? Die Logik welche Funktionalität je Item ausgeführt werden soll, kannst du doch in einem Handler packen.
Baka wa shinanakya naoranai.
Mein XING Profil.