如何处理LongListMultiSelector的选定项?

时间:2014-03-19 05:35:06

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

我有LongListMultiSelector中的项目列表 - 如何处理所选项目?

我的LongListMultiSelector xaml:

<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>

TextBlock点击事件处理程序代码:

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

LongListMultiSelector SelectionChanged事件处理程序代码:

private void longlist_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

}

我找到了解决方案here的一部分,但是,如果选择了至少一个项目,然后textblockTap事件无法处理,则问题 - longlist_SelectionChanged事件处理所有事情。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

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
}

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

答案 1 :(得分:0)

您的XAML DataTemplate。

    <DataTemplate x:Key="listItemTemplate">
        <StackPanel Orientation="Horizontal" Margin="4,4">
            <TextBlock Tap="textblockTap" Margin="0,-7,0,0" Text="{Binding Name}" Style="{StaticResource PhoneTextLargeStyle}"/>
        </StackPanel>
    </DataTemplate>

在您的CS页面中;

    private void textblockTap(object sender, EventArgs e)
    {
            var file = (TextBlock)sender;
            var ContentFile = (string)file.Text;
            MessageBox.Show(ContentFile);
    }

此示例将显示MessageBox中所选项目的文本。