0

コンテキスト メニューで選択した listBox 項目のを取得しようとしています。解決策を探しましたが、いくつかの回答を見ましたが、実際に私の質問に答えたものはありませんでした。私が試みた他のすべての試みは、データをバインドするために使用されるクラスの名前を教えてくれました。これは 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 に答える