我正在尝试通过上下文菜单选择列表框项目的值。我已经找到了解决方案,我已经看到了一些答案,但没有一个真正回答我的问题。我试过的所有其他尝试都给了我用于绑定数据的类的名称。 这是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,如上所述,是用于绑定数据的类的名称。
你可以帮我解决这个问题吗? 谢谢。答案 0 :(得分:2)
DataContext
应该包含绑定到ListBoxItem的对象。假设Vault
是您的对象,publicKey
是绑定成员:
string fileName = ( ( ( sender as MenuItem ).DataContext ) as Vault ).publicKey;