Xamarin Forms: Элемент в списке исчез при нажатии после прокрутки - PullRequest
1 голос
/ 03 октября 2019

У меня есть просмотр списка с viewcell. Я хочу переключить цвет фона стека на элемент, чтобы он был выбран или нет. Проблема в том, что элемент прокручивается после прокрутки. Только что нажал после прокрутки

Это GIF, который показывает проблему https://drive.google.com/file/d/1-E3rkzwLeuZ6odCmFtfA1roMwrH5tigq/view?usp=sharing

Я попытался удалить список источников элементов и заполнить его снова, но, конечно,не работалЯ попытался сделать CachingStrategy всех типов, но цвет фона изменился только на RetainElement

Версия Xamarin Forms: 4.0.0.425677

Код XAML

<StackLayout Margin="20" BackgroundColor="White">

        <Grid>
        <ListView x:Name="lstProducts" ItemTapped="lstProducts_ItemTapped" HasUnevenRows="True" ItemsSource="{Binding ProductsList}" 
                  CachingStrategy="RetainElement">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Vertical">
                                <StackLayout Orientation="Horizontal" BackgroundColor="{Binding SelectedStateColor}">
                                <Image Source="{Binding ImageUrl}" WidthRequest="40" HeightRequest="40" HorizontalOptions="Start" />
                                <StackLayout Orientation="Vertical" HorizontalOptions="StartAndExpand">
                                    <Label Text="{Binding title}" FontSize="Large" TextColor="Black" />
                                    <Label Text="{Binding description}" FontSize="Small" TextColor="Gray" />
                                </StackLayout>

                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        </Grid>
        <Button Text="موافق" Clicked="Submit_Clicked" Style="{StaticResource PurpleButton}" Margin="10,0,10,10" />
    </StackLayout>

Модель продукта

public class Product
{
        public string title { get; set; }
        public string description { get; set; }
        public Color SelectedStateColor
        {
            get
            {
                if (IsSelected == true)
                    return Color.LightGreen;
                else
                    return Color.White;
            }
        }
        public bool IsSelected { get; set; }
}

ViewModel

public class ProductsViewModel : INotifyPropertyChanged
{

public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

private ObservableCollection<Product> _productsList = new ObservableCollection<Product>();
        public ObservableCollection<Product> ProductsList
        {
            get { return _productsList; }
            set { _productsList = value;OnPropertyChanged(); }
        }
}

ItemTapped

public class ProductsPage : ContentPage
{

public ProductsPage()
{
BindingContext = new ProductsViewModel();
            InitializeComponent ();

}
ProductsViewModel Context=> (ProductsViewModel)BindingContext;

private void lstProducts_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            Product product = (Product)e.Item;
            product.IsSelected = !product.IsSelected;


            Context.ProductsList[Context.ProductsList.IndexOf(product)] = product;
        }

}
...