从挂起的ListBox中获取所选项目

本文关键字:选项 项目 获取 挂起 ListBox | 更新日期: 2023-09-27 18:24:35

我在WP7应用程序中有一个ListBox,当用户拿着一个项目时,我想在那里对它做一些事情。事件工作非常棒。调用了我的hold方法,但我无法检测列表中的哪个元素被hold。ListBox.SelectedItem总是-1,stackoverflow上另一篇文章中的代码不起作用:

FrameWorkelement element = (FrameworkElement) e.OriginalSource;
ItemViewModel item = (ItemViewModel) element.DataContext;

在第二行运行它时,我得到一个InvalidCastException。

从挂起的ListBox中获取所选项目

以下代码应该可以工作。

private void StackPanel_Hold(object sender, GestureEventArgs e)
{
    ItemViewModel itemViewModel = (sender as StackPanel).DataContext as ItemViewModel;
    string t = itemViewModel.LineOne;
}

注意:在使用sender对象的DataContext之前,请确保将sender对象强制转换为正确的类。在这个例子中,我在DataTemplate:中使用了StackPanel

<ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,0,0,17" Height="78" Hold="StackPanel_Hold">
                <TextBlock Text="{Binding LineOne}" />
                <TextBlock Text="{Binding LineTwo}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>