[Erledigt]: ListBox und Kontextmenü: kein selektiertes Item
Ergebnis 1 bis 16 von 16
  1. Hallo zusammen.

    Ich habe meiner App ein Kontextmenü hinzugefügt:

    Code:
                    <ListBox x:Name="lstGeldausgaben" Margin="0,0,-12,0"  ItemsSource="{Binding Geldausgaben}"  MouseLeftButtonUp="ListBox_MouseLeftButtonUp">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="20"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="*"/>
                                    </Grid.RowDefinitions>
                                    <TextBlock Grid.Column="0"  Grid.Row="0" Grid.ColumnSpan="3" Text="{Binding Zweck}"  TextWrapping="Wrap" Style="{StaticResource  PhoneTextExtraLargeStyle}"/>
                                    <TextBlock Grid.Column="0"  Grid.Row="1" Text="{Binding Betrag,Converter={StaticResource  doubleToStringConv}}" TextWrapping="Wrap" Margin="12,-6,-5,0"  Style="{StaticResource PhoneTextSubtleStyle}"/>
                                    <TextBlock Grid.Column="1"  Grid.Row="1" Text="€" TextWrapping="Wrap" Margin="12,-6,-5,0"  Style="{StaticResource PhoneTextSubtleStyle}"/>
                                    <TextBlock Grid.Column="2"  Grid.Row="1" Text="{Binding Path=Datum,Converter={StaticResource  dateTimeConv}}" TextWrapping="Wrap" Margin="12,-6,12,0"  Style="{StaticResource PhoneTextSubtleStyle}"/>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu>
                                <toolkit:MenuItem  x:Name="mniDeleteGeldausgabe" Header="Löschen"  CommandParameter="{Binding  ElementName=lstGeldausgaben,Path=SelectedItem}">
                                    <toolkit:MenuItem.Command>
                                        <cmd:CommandDeleteGeldausgabe></cmd:CommandDeleteGeldausgabe>
                                    </toolkit:MenuItem.Command>
                                </toolkit:MenuItem>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                    </ListBox>
    Das Command wird gefeuert, allerdings ist kein Item selektiert. Muss ich irgendwie "zu Fuß" ermitteln, über welchem ListBoxItem das Kontextmenü geöffnet wurde?

    Eddie
    Geändert von EddieDean (30.03.2011 um 14:42 Uhr) Grund: Gelöst
    0
     

  2. Also wenn du das Ausgewählte Item suchst, dafür gibt es eine Methode die dir das liefert. Das wäre dann in etwa ListBox.selectedItem.
    Aber bin mir nicht sicher ob es dass ist was du suchst ^^
    0
     

  3. Ich mache das immer ein wenig anders. Ich packe das Contextmenü in das DataTemplate.
    Dann setze ich für jedes MenuItem den DataContext={Binding}

    Jetzt kannst du bei einem Click auf dieses Item bei Sender den DataContext abfragen und hast dein Item auf dem das ContextMenü aufgerufen wurde.

    Was dein MenuItem.Command macht weiß ich nicht, dass habe ich noch nie verwendet.
    Ich würde mal schätzen, dass du das wie im folgenden machen kannst (habe es aber nicht ausprobiert, sollte aber funktionieren)
    Code:
    <ListBox x:Name="lstGeldausgaben" Margin="0,0,-12,0"  ItemsSource="{Binding Geldausgaben}"  MouseLeftButtonUp="ListBox_MouseLeftButtonUp">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="20"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="*"/>
                                    </Grid.RowDefinitions>
    <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu>
                                <toolkit:MenuItem  x:Name="mniDeleteGeldausgabe" Header="Löschen"  CommandParameter="{Binding}">
                                    <toolkit:MenuItem.Command>
                                        <cmd:CommandDeleteGeldausgabe></cmd:CommandDeleteGeldausgabe>
                                    </toolkit:MenuItem.Command>
                                </toolkit:MenuItem>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
    
    
                                    <TextBlock Grid.Column="0"  Grid.Row="0" Grid.ColumnSpan="3" Text="{Binding Zweck}"  TextWrapping="Wrap" Style="{StaticResource  PhoneTextExtraLargeStyle}"/>
                                    <TextBlock Grid.Column="0"  Grid.Row="1" Text="{Binding Betrag,Converter={StaticResource  doubleToStringConv}}" TextWrapping="Wrap" Margin="12,-6,-5,0"  Style="{StaticResource PhoneTextSubtleStyle}"/>
                                    <TextBlock Grid.Column="1"  Grid.Row="1" Text="€" TextWrapping="Wrap" Margin="12,-6,-5,0"  Style="{StaticResource PhoneTextSubtleStyle}"/>
                                    <TextBlock Grid.Column="2"  Grid.Row="1" Text="{Binding Path=Datum,Converter={StaticResource  dateTimeConv}}" TextWrapping="Wrap" Margin="12,-6,12,0"  Style="{StaticResource PhoneTextSubtleStyle}"/>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                        
                    </ListBox>
    Jetzt müsste der CommandParameter das Item sein, das im DataTemplate jeweils angezeigt wird.
    Wenn das nicht funktioniert, kann ich dir meine Lösung geben
    0
     

  4. Zuerst einmal sorry für die späte Antwort.

    @Nemoc: Genau das versuche ich ja. Es sieht fast so aus, als würde bei einem "Rechtsklick" auf ein Listenelement das entsprechende Item nicht selektiert.

    @DehoDev: Habe ich probiert. Resultat ist, dass ich eine Exception "0xc00cee3a" bekomme. Einen Fehlertext (bis auf "0xc00cee3a") gibt es nicht.
    Was genau soll bei "CommandParameter="{Binding}"" gebunden werden?

    --

    Kommando zurück! *g*

    Hab soeben erst bei genauerer Betrachtung gesehen, dass du das ContextMenu innerhalb des Grids im DataTemplate platziert hattest... ich hatte es dahinter gesetzt... *schäm*

    Jetzt, wo es auch innerhalb des Grids sitzt, klappt es auch.

    Ich danke dir für den Tipp
    Geändert von Chatfix (30.01.2012 um 14:25 Uhr) Grund: Beiträge zusammengeführt.
    0
     

  5. Tuet mir leid, das ich das Thema wieder "ausgrabe"
    Was genau ist ein Command und wie mach ich dies?

    Habe auch eine Listbox und möchte gerne Elemente davon löschen

    Und gibt es eien Möglichkeit herauszufinden auf welcher Pivot seite der Benutzer ist, da ich eine Seite mit 2 Pivot Itemes haben, die je eine Listbox haben mit dem selben Template

    Vielen Dank und gruss
    Cr3dos
    Geändert von Cr3dos (16.04.2011 um 14:13 Uhr)
    0
     

  6. Hi Cr3dos,

    hier eine Einführung in Commands zu geben würde wohl den Rahmen sprengen.
    Aber es gibt ein kostenloses OpenBook von Galileo Computing zum Thema Visual C# 2010. Dort sind auch Kapitel zum Thema WPF (auch Commands) vorhanden.

    Öhm... bzgl. der Pivots kann ich dir leider nicht helfen, da ich mit Pivots bisher nichts gemacht habe.

    Viele Grüße,
    Alex
    1
     

  7. Hallo Alex

    Danke für den Tipp. Werde ich mal anschauen
    0
     

  8. Die Commands werde ich mir auch mal anschauen, habe ich bisher auch noch nicht gekannt.

    Aber um die Frage mit den Pivots zu beantworten:
    Gib dem Pivot einen Namen in der xaml und dann kannst du im Code Behind mit pivotname.SelectedIndex den Index der aktuellen Seite herausfinden und setzen (Also zu anderem Pivotitem wechseln)
    0
     

  9. Bin leider nicht wirklich schlau daraus geworden, gibt es nicht eine andere Möglichkeit, dass selektierte Item herauszufinden?

    Edit: dehoDev danke für die Hilfe

    Edit2: habe eine Lösung gefunden:
    Man macht eine Click event mit dem Inhalt:

    //string header = (sender as MenuItem).Header.ToString();
    ListBoxItem selectedListBoxItem = this.listboxname.ItemContainerGenerator.ContainerFromItem((sender as MenuItem).DataContext) as ListBoxItem;;

    if (selectedListBoxItem == null)
    {
    return;
    }
    Mit dem Content von dem item, kann man einen Cast zum Objekt machen und dann aus der Liste entfernen.
    Geändert von Cr3dos (16.04.2011 um 20:25 Uhr)
    0
     

  10. Hey,
    muss das Thema mal wieder ausgraben. Worauf machst du das Click Event? Auf dem Menüitem?
    Irgendwie werde ich au der anderen Lösung im Moment auch nicht ganz so schlau ^^

    Danke und Gruss
    Nemoc
    0
     

  11. Hallo Nemoc

    Ja das Click event macht man auf das Menu Item
    <toolkit:MenuItem ... Click="menuItem_Click"/>

    Gruss
    Cr3dos
    0
     

  12. mh, also bei mir gibt das für ListBoxItem selectedListBoxItem immer null.

    Code:
                            <toolkit:ContextMenuService.ContextMenu>
                                <toolkit:ContextMenu>
                                    <toolkit:MenuItem Header="Item 1" Click="MenuItem_Click"/>
                                </toolkit:ContextMenu>
                            </toolkit:ContextMenuService.ContextMenu>
    muss ich da noch was hinzufügen?
    0
     

  13. Wo hast du diesen Code drin?
    Bei mir sieht es so aus:

    <DataTemplate>
    <StackPanel Orientation="Horizontal" Margin="0,0,2.5,5" >
    <TextBlock Foreground="Black" Text="{Binding name}" FontWeight="Bold" FontSize="35" />

    <toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu>
    <toolkit:MenuItem Header="{Binding AppResources.loeschen, Source={StaticResource Locales}, Mode=OneWay}" Click="menuItem_Click"/>
    </toolkit:ContextMenu>
    </toolkit:ContextMenuService.ContextMenu>
    </StackPanel>
    </DataTemplate>
    0
     

  14. Code:
                        <ListBox ItemTemplate="{StaticResource MedikamenteItemTemplate1}" ItemsSource="{Binding AllMedikamente}" Name="VorhandenListbox" SelectionChanged="VorhandenListbox_SelectionChanged" Loaded="VorhandenListbox_Loaded">
                            <toolkit:ContextMenuService.ContextMenu>
                                <toolkit:ContextMenu>
                                    <toolkit:MenuItem Header="Item 1" Click="MenuItem_Click"/>
                                </toolkit:ContextMenu>
                            </toolkit:ContextMenuService.ContextMenu>
                        </ListBox>
    Der Versuch ein Test-ContextMenü einzufügen.
    Als Datacontext wird im Konstruktor das ViewModel des Programmes gesetzt.
    0
     

  15. Ich glaube du musst es ins MedikamenteItemTemplate1 packen. Aber versprechen kann ich nichts
    1
     

  16. AAAAH! Volltreffer

    Danke vielmals!
    0
     

Ähnliche Themen

  1. Enum an ListBox / ComboBox binden
    Von EddieDean im Forum Windows Phone 7 Entwicklung
    Antworten: 0
    Letzter Beitrag: 23.03.2011, 11:03
  2. Uhrzeit Listbox
    Von Schledi im Forum Windows Phone 7 Entwicklung
    Antworten: 3
    Letzter Beitrag: 25.01.2011, 20:23
  3. Kontextmenü ändern
    Von anxifer im Forum HTC HD2 Sonstiges
    Antworten: 1
    Letzter Beitrag: 20.01.2010, 21:42
  4. Antworten: 2
    Letzter Beitrag: 04.06.2009, 06:38
  5. menu bar item (kein pop-up) highlighten, aber wie?
    Von ewiebe1 im Forum Programmieren
    Antworten: 10
    Letzter Beitrag: 27.01.2006, 08:42

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

wp7 context menu listbox

wp7 listbox contextmenu

windows phone context menu listbox

windows phone listboxitem grid

0xc00cee3a

wp7 listbox context menu

windows phone listbox context menu

listbox context menu selected item

windows phone 7 listbox context menu

windows phone listbox contextmenu

wp7 listbox

contextmenu wenn listbox item selektiert ist c#

listbox contextmenu wpf datatemplate

windows phone 0xc00cee3a

windows phone listbox item click

listbox contextmenu

wp7 context menu list box

wp7 0xc00cee3awp7 context menulistbox context menu binding current itemwp7 listbox menuwpf listbox context menuewindows phone listbox select

Stichworte