我有一个包含Picker的ViewCells列表视图。我在viewcell中设置了SelectedItem,但是当滚动listview时,picker将内部的selectedindex设置为-1,并且selectedItem设置为null。有没有人有类似的问题?
单元格视图:
<?xml version="1.0" encoding="UTF-8"?>
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Calderys.Core.Pages.Documents.DocumentsListItemView">
<StackLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Calderys.Core.Pages.Documents.DocumentsListItemView"
Orientation="Vertical"
HorizontalOptions="FillAndExpand">
<!-- Language picker -->
<Picker
HeightRequest="40"
HorizontalOptions="FillAndExpand"
ItemsSource="{Binding Languages}"
ItemDisplayBinding="{Binding Title}"
Margin="0,10,0,10"
Title="Select language"
SelectedItem="{Binding SelectedLanguage.Value}"
x:Name="LanguagePicker"
/>
</StackLayout>
</ViewCell>
ViewModel单个列表视图项代码部分:
public DocumentBaseListItemViewModel(
DocumentItemModel source,
INavigationService navigationService)
{
Item = source;
_id = source.Id;
/*
* Services
*/
_navigationService = navigationService;
/*
* Collections
*/
if (Item.Pdfs != null && Item.Pdfs.Count > 0)
{
Languages = Item.Pdfs.Select(x => new KeyValueDtoModel { Key = x.LanguageCode, Title = x.Language }).ToObservableCollection();
}
else if (Item.LocalPdfs != null && Item.LocalPdfs.Count() > 0)
{
Languages = Item.LocalPdfs.Select(x => new KeyValueDtoModel { Key = x.LanguageCode, Title = x.Language }).ToObservableCollection();
}
/*
* Properties
*/
SelectedLanguage = new ReactiveProperty<KeyValueDtoModel>();
SetSelections();
}
public void SetSelections()
{
if (Item.LocalPdfs != null && Item.LocalPdfs.Count() > 0 && Languages != null && Languages.Count() > 0)
{
SelectedLanguage.Value = Languages.Where(x => x.Key == Item.LocalPdfs.First().LanguageCode).First();
}
}
列表视图Xaml代码:
<ListView
CachingStrategy="RecycleElementAndDataTemplate"
ItemsSource="{Binding ListItems}"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<documents:DocumentsListItemView />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
为ListView设置缓存到RecycleElement或RecycleElementAndDataTemplate时会出现问题。