LongListSelector SelectedItem 为 Null
Posted
技术标签:
【中文标题】LongListSelector SelectedItem 为 Null【英文标题】:LongListSelector SelectedItem is Null 【发布时间】:2014-08-17 06:33:29 【问题描述】:我正在玩一个音乐播放器应用程序,并将播放列表存储在一个列表中。 这显示在 LongListSelector 中,其中包含带有图像和两个文本块的 StackPanel:
<DataTemplate x:Key="playlistItemTemplate">
<StackPanel Orientation="Horizontal">
<Image Height="80" Width="80" Margin="0,0,10,0" Source="/Assets/stop.png" Tap="removeSong_Tap" />
<StackPanel VerticalAlignment="Center" Orientation="Horizontal" >
<StackPanel Orientation="Vertical">
<TextBlock Text="Binding Name" FontSize="22" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="Binding Artist" Style="StaticResource PhoneTextSubtleStyle" VerticalAlignment="Center" HorizontalAlignment="Left" />
</StackPanel>
</StackPanel>
</StackPanel>
</DataTemplate>
当用户单击图像时,我想从列表中删除选定的歌曲。 我正在使用以下代码:
private void removeSong_Tap(object sender, System.Windows.Input.GestureEventArgs e)
int selectedIndex = playlistList.ItemsSource.IndexOf(playlistList.SelectedItem as ItemViewModel);
if (selectedIndex == Data.currentSongNo)
if (Data.currentSongNo == Data.playList.Count - 1) //last song in the playlist
MediaPlayer.Stop();
else
playNextSong();
removeSongFromPlaylist(selectedIndex);
但是每次我点击图片时,SelectedItem 都会显示为 null,这意味着 selectedIndex 设置为 -1
我也尝试过使用:
int selectedIndex = App.ViewModel.Items.IndexOf(playlistList.SelectedItem as ItemViewModel);
但这具有相同的结果。
任何想法我做错了什么?
【问题讨论】:
尝试使用playlistList.Items
而不是ItemsSource
谢谢,但代码似乎不喜欢那样。另外我遇到的问题是 playlistList.SelectedItem 为空
出于兴趣,我从这里得到了原始代码sn-p:***.com/questions/16514074/…
尝试使用 LongListSelector 的 SelectionChanged 事件!
我不认为这会有所帮助,因为我只想在用户点击歌曲标题旁边的 [X] 图像时运行点击事件
【参考方案1】:
我确信有几种方法可以做到这一点。我实现这一点的一种简单方法是使用在 SelectionChanged 事件开始时检查的标志。
点击事件将在树中的 selection_changed 事件之前触发,所以我设置了一个这样的点击事件:
private void ItemClose_Tap(object sender, System.Windows.Input.GestureEventArgs e)
isItemCloseTapped = true;
然后,随着 Selection Changed 事件的触发,我实现如下:
private void MusicListSelectChange(object sender, SelectionChangedEventArgs e)
Model.MusicItem item = ((LongListSelector)sender).SelectedItem as Model.MusicItem;
if (item == null)
return;
if (isItemCloseTapped )
CloseInList(item);
isItemCloseTapped = false;
//...
//((LongListSelector)sender).SelectedItem = null;
)
同样,这是一种方法,但对我来说效果很好。
【讨论】:
【参考方案2】:而不是尝试在您的 Tap 事件处理程序中查询 Selected[Index|Item]
查询 sender
。
这将告诉您该人“选择”了哪个项目。
您遇到的根本问题是,当该人点击图像时,该项目实际上并未被选中。
【讨论】:
以上是关于LongListSelector SelectedItem 为 Null的主要内容,如果未能解决你的问题,请参考以下文章
用于 Xamarin.Forms 的带有标头 (LongListSelector) 的 ListView
LongListSelector SelectedItem 为 Null
如何在 windows phone 7 中禁用 LongListSelector 中的滚动视图