如何在上下文菜单中获取listBox项的值?

时间:2012-11-17 19:36:55

标签: windows-phone-7

我正在尝试通过上下文菜单选择列表框项目的。我已经找到了解决方案,我已经看到了一些答案,但没有一个真正回答我的问题。我试过的所有其他尝试都给了我用于绑定数据的类的名称。 这是XAML:

<ListBox Name="pubKeyListBox" Height="150" Margin="0,177,0,0" VerticalAlignment="Top">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu Name="ContextMenu" >
                        <toolkit:MenuItem Name="email" Header="send via email" Click="email_Click" />
                        <toolkit:MenuItem Name="delete" Header="delete" Click="delete_Click" />
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>
                <TextBlock Text="{Binding pubKey}" FontSize="24" Width="250"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

和背后的代码:

private void email_Click(object sender, RoutedEventArgs e)
    {            
        ListBoxItem selectedKey= this.pubKeyListBox.ItemContainerGenerator.ContainerFromItem((sender as MenuItem).DataContext) as ListBoxItem;

        int selectedItem= pubKeyListBox.ItemContainerGenerator.IndexFromContainer(selectedKey);
        string fileName = pubKeyListBox.Items[selectedItem].ToString();
    }

之后,fileName包含字符串“Vault.publicKey”,其中publicKey,如上所述,是用于绑定数据的类的名称。

你可以帮我解决这个问题吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

DataContext应该包含绑定到ListBoxItem的对象。假设Vault是您的对象,publicKey是绑定成员:

string fileName = ( ( ( sender as MenuItem ).DataContext ) as Vault ).publicKey;