Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从处于保留状态的列表框中获取所选项目_C#_Windows Phone 7_Listbox - Fatal编程技术网

C# 从处于保留状态的列表框中获取所选项目

C# 从处于保留状态的列表框中获取所选项目,c#,windows-phone-7,listbox,C#,Windows Phone 7,Listbox,我在WP7应用程序中有一个列表框,当用户拿着一个项目时,我想对它做些什么。活动做得很好。调用了我的hold方法,但我无法检测列表中的哪个元素是hold。 ListBox.SelectedItem始终为-1,stackoverflow上另一篇文章的代码无效: FrameWorkelement element = (FrameworkElement) e.OriginalSource; ItemViewModel item = (ItemViewModel) element.DataContext;

我在WP7应用程序中有一个列表框,当用户拿着一个项目时,我想对它做些什么。活动做得很好。调用了我的hold方法,但我无法检测列表中的哪个元素是hold。 ListBox.SelectedItem始终为-1,stackoverflow上另一篇文章的代码无效:

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

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

以下代码应该可以工作

private void StackPanel_Hold(object sender, GestureEventArgs e)
{
    ItemViewModel itemViewModel = (sender as StackPanel).DataContext as ItemViewModel;
    string t = itemViewModel.LineOne;
}
注意:在使用发送方对象的DataContext之前,请确保将发送方对象强制转换为正确的类。在本例中,我在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>

下面的代码应该可以工作

private void StackPanel_Hold(object sender, GestureEventArgs e)
{
    ItemViewModel itemViewModel = (sender as StackPanel).DataContext as ItemViewModel;
    string t = itemViewModel.LineOne;
}
注意:在使用发送方对象的DataContext之前,请确保将发送方对象强制转换为正确的类。在本例中,我在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>