Laden...

OnClick setzen oder ListViewItem bekommen

Erstellt von Seshiro vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.911 Views
S
Seshiro Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren
OnClick setzen oder ListViewItem bekommen

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! 😃

2.223 Beiträge seit 2005
vor 14 Jahren

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

S
Seshiro Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

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 -.-'

6.862 Beiträge seit 2003
vor 14 Jahren

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.

S
Seshiro Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

Yeah! Danke es klappt 😃
Habts mir sehr geholfen 😃