0

我试图获取通过上下文菜单选择的列表框项目的值。我已经寻找了一个解决方案,我已经看到了一些答案,但他们都没有真正回答我的问题。我尝试的所有其他尝试只是给了我用于绑定数据的类的名称。这是 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,如前所述,是用于绑定数据的类的名称。

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

4

1 回答 1

2

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

string fileName = ( ( ( sender as MenuItem ).DataContext ) as Vault ).publicKey;
于 2012-11-17T22:36:13.527 回答