Xamarin表单ListView ViewCell,Picker SelectedIndex在滚动时设置为-1,SelectedItem设置为null

时间:2018-03-22 13:04:37

标签: xamarin.forms

我有一个包含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时会出现问题。

0 个答案:

没有答案