Как обновить вид карусели в c # Xamarin? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть представление карусели , отображающее список изображений, и этот список изменится, и я не могу заставить представление карусели добавлять или удалять изображения.

XAML : 
 <CarouselView x:Name="main_carousel">
            <CarouselView.ItemTemplate>
                <DataTemplate>
                        <Image Source="{Binding .}"/>
                </DataTemplate>
            </CarouselView.ItemTemplate>
 </CarouselView>

Мой список путей к изображениям добавлен в источник элемента в конструкторе главной страницы

C# : 
public static List<string> imagesList;

public MainPage()
        {

            InitializeComponent();

            imagesList = new List<string>();
            main_carousel.ItemsSource = imagesList;
        }

Сначала карусель пуста, но затем я добавляю несколько путей в свой список, например, вот так:

C# :
public void addElementToMainCarousel()
        {
            imagesList.add(absolute_path + "myImage1.jpg");            
            imagesList.add(absolute_path + "myImage2.jpg");
        }

В представлении карусели ничего не отображается, если впоследствии я добавлю пути в список. Но это работает, если я добавлю пути в списке перед первым main_carousel.ItemsSource = imagesList;.

Я попытался переустановить ItemsSource следующим образом:

C# :
 public void addElementToMainCarousel()
        {
            imagesList.add(absolute_path + "myImage1.jpg");            
            imagesList.add(absolute_path + "myImage2.jpg");
            main_carousel.ItemsSource = imagesList;
        }

но это не работает.

Есть ли способ принудительно обновить представление карусели или вы знаете что-нибудь, что может мне помочь?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

По какой-то причине CarouselView не будет перерисовывать себя на экране, даже если вы обновите imagesList. Вам необходимо переназначить CarouselView.ItemSource свойство с новым List<string> или Array, содержащим ваши обновленные данные. Пожалуйста, смотрите образец ниже:

 myCarouselView.ItemSource = imageslist.ToArray();

Это работает для меня, так как метод ToArray() возвращает новый объект с обновленными данными, скопированными из предыдущего List.

1 голос
/ 17 мая 2019

Всякий раз, когда вы хотите использовать список, который связывает как представление, так и модель представления, вы должны реализовать ObservableCollection, а не список. ObservableCollection отражает ваши изменения из стороны в сторону.

ObservableCollection<string> myList = new ObservableCollection<string>();
mylist.Add(yourString);
listview.itemSource = mylist;
...