2012-02-13 10 views
2

私はコンテキストメニューのリストボックスを持っています。 ContextMenuItemクリックイベントハンドラでSelectedIndex(SelectedItem)プロパティの値を取得するにはどうすればよいですか?現在のイベントEdit_ClickおよびDelete_CLickでは、CarsList.SelectedIndexの値は常に-1です。ContextMenuイベントハンドラのListBox.SelectedIndex

ここにXAMLでの私のリストボックス:

  <ListBox Name="CarsList" Style="{StaticResource ListBoxStyle}" Margin="26,0,26,0" Height="380" > 
       <toolkit:ContextMenuService.ContextMenu> 
        <toolkit:ContextMenu Name="ContextMenu" > 
         <toolkit:MenuItem Name="Edit" Header="Edit" Click="Edit_Click"/> 
         <toolkit:MenuItem Name="Delete" Header="Delete" Click="Delete_Click"/> 
        </toolkit:ContextMenu> 
       </toolkit:ContextMenuService.ContextMenu> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding CarName}" TextTrimming="WordEllipsis" Foreground="Black" FontSize="24" Width="428"/> 
          <TextBlock Text="{Binding VIN}" TextWrapping="Wrap" Foreground="Gray" FontSize="20" Width="428"/> 
          <TextBlock Text="{Binding Date}" TextWrapping="Wrap" Foreground="Gray" FontSize="20" Width="428"/> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

感謝。

答えて

9

まず、Context MenuListBoxに割り当てました。各項目ではありません。だから、代わりに<toolkit:ContextMenuService.ContextMenu>ブロックをStackPanelに移動してください。

コンテキストメニューのクリックが実行された要素を取得するにはいくつかの方法があります:

Clickハンドラでは、あなたがsenderオブジェクト(それはMenuItemで、私は推測)

MenuItemにキャストしてまで見を持っていますそれのDataContext。リストにバインドしたコレクションの項目になります。 YourListBoxItemCollectionはあなたがCarsList.ItemsSource

+0

ContextMenuブロックをStackPanelに移動し、ListBox.ItemsSourceの値に "Cars"などの値を割り当てました。しかし、私はコードにエラーがあります > int selectedIndex = Cars.IndexOf((送信者としてUIElement).DataContext); // System.Windows.UIElementのDataContextの定義が見つかりません 何が問題なのですか? – Lumen

+0

申し訳ありませんが、 'DataContext'は' FrameworkElement'にあります。 'UIElement'ではなく' MenuItem'を試してみてください。それは動作するはずです – Ku6opr

+0

ListBoxItem contextMenuListItem = CarsList.ItemContainerGenerator.ContainerFromItem(ContextMenuとしての送信者).DataContext)をListBoxItemとして; //このコードが見つかりましたが、例外NullReferenceExceptionがスローされます。私はItemTemplateのテキストボックスの値をどのように読み取ることができるのか分かりません。 – Lumen

0

に割り当てるものですあなたはListPicker(http://silverlight.codeplex.com/releases/view/を使用する必要があるように見える

int selectedIndex = YourListBoxItemCollection.IndexOf((sender as MenuItem).DataContext) 

、:だから、あなたがすることによって、インデックスを見つけることができます75888)をSelectedItemsで置き換えます。 OR 要素選択のフラグを追加します。

+0

解決済み:このFAQ:http://windowsphonegeek.com/tips/wp7-contextmenu-answers-to-popular-questions – Lumen

+1

将来的に質問:> ListBoxItem selectedListBoxItem = CarsList.ItemContainerGenerator.ContainerFromItem((MenuItemとしての送信者).DataContext)ListBoxItem; int SelectedIndex = CarsList.ItemContainerGenerator.IndexFromContainer(selectedListBoxItem); – Lumen

+0

これはうまくいきますが、より柔軟な解決策?すべての回答に感謝します。 – Lumen