如何处理LongListMultiSelector的选定项?

时间:2013-12-09 19:12:23

标签: c# windows-phone-8 windows-phone

我希望能够:

  • 在用户点按一个项目时打开邮件。
  • 并在用户选择多封电子邮件时删除多封电子邮件

所以我选择了LongListMultiSelector

在内置LongListSelector中,我会像这样处理SelectionChanged事件:

private void mails_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var selectedItem = mailsLongListSelector.SelectedItem as Mail;

    if (selectedItem == null)
        return;
    ...
    mailsLongListSelector.SelectedItem = null;
}

我想要与wptoolkit的LongListMultiSelector中的功能完全一样。比如当你选择一个电子邮件打开并阅读它时。

当您点击某个项目的左侧并出现复选框时,会出现

LongListMultiSelector SelectionChanged。这不是我想要的。

问题是: 当用户点击 LongListMultiSelector 中的一项时,我该如何执行某些操作?感谢。

2 个答案:

答案 0 :(得分:3)

你可以试试这个。如果这是你的LongListSelector

<tkit:LongListMultiSelector Name="longlist" SelectionChanged="longlist_SelectionChanged">
    <tkit:LongListMultiSelector.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Title}" FontSize="32" Tap="TextBlock_Tap"/>
        </DataTemplate>
    </tkit:LongListMultiSelector.ItemTemplate>
</tkit:LongListMultiSelector>

并且它有一个itemtemplate,您可以检测到项目的点击。

private void TextBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    var itemTapped = (sender as FrameworkElement).DataContext as Book;
}

仍然有更改选择

private void longlist_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

}

答案 1 :(得分:0)

使用LongListMultiSelector后,添加或删除项目时会触发SelectionChanged事件。如果你想在不管添加/删除项目的情况下执行操作,我都设法这样做(对于一个简单的字符串):

private void longlist_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string selectedItem = String.Empty;
    if (e.AddedItems.Count > 0) selectedItem = e.AddedItems[0] as string;
    else selectedItem = e.RemovedItems[0] as string;
    MessageBox.Show(selectedItem); // do your work
}

应该在点击时单独选择项目时运行,但是当同时添加/删除更多项目时此方法会出现问题 - 如果需要,那么您也应该处理它。