Ошибка GeneratorPosition для связанной наблюдаемой коллекции - PullRequest
2 голосов
/ 17 февраля 2012

Я использую элемент управления Transitionals Slideshow, который имеет видимую коллекцию строк, привязанную к источнику предметов.Эти строки представляют собой пути к файлам для каждого изображения в слайд-шоу.Когда я впервые загружаю приложение WPF, оно правильно запускает этот метод (используя путь к каталогу для генерации PicSlideShowCollection):

public void SelectImages(string path)
    {
        // Validate
        if (string.IsNullOrEmpty(path)) throw new ArgumentException("path");

        PicSlideShowCollection.Clear();          


        // Get directory info for specified path
        DirectoryInfo di = new DirectoryInfo(path);

        // Image mask
        string[] extensions = new string[] { "*.jpg", "*.png", "*.gif", "*.bmp" };

        // Search for all
        foreach (string extension in extensions)
        {
            foreach (FileInfo fi in di.GetFiles(extension.ToLower()))
            {
                PicSlideShowCollection.Add(fi.FullName);                    
            }
        }           
    }

Однако у меня есть кнопка, позволяющая пользователю изменить каталог изображений наиспользовать в слайд-шоу и повторно запускает вышеуказанный метод.Когда это выполнено, я получаю эту ошибку:

Положение Generator '-1,1', переданное для удаления, не имеет смещения, равного 0.

Это происходит наИнструкция PicSlideShowCollection.Clear ().Если я прокомментирую эту инструкцию, новые изображения каталогов ДОБАВЛЯЮТСЯ К исходным изображениям каталогов, что НЕ то, что я хочу.

Я знаю, что это связано с PicSlideShowCollection, используемым в качестве источника элемента для элемента управления Slide show, но мне нужно знать, как я могу предотвратить возникновение этой ошибки.

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 декабря 2015
Slideshow.AutoAdvance = false;

Slideshow.SelcetedIndex=-1;

var count=PicSlideShowCollection.Count;

forearch(var item in newsources)
{
 PicSlideShowCollection.Add(item);
}

while(count--)
 PicSlideShowCollection.RemoveAt(0);

Slideshow.SelcetedIndex=0;
0 голосов
/ 17 февраля 2012

Я не могу объяснить, почему возникает эта ошибка. GeneratorPosition используется ItemContainerGenerator элемента ItemsControl, который должен просто работать, когда вы привязываетесь к его свойству ItemsSource и добавляете или удаляете элементы в / из исходной коллекции. Очистка исходной коллекции, конечно, также является допустимой операцией.

Возможным обходным решением проблемы может быть сброс настроек ItemsSource при каждом переключении на другой каталог изображений. Таким образом, вместо очистки существующей коллекции

PicSlideShowCollection.Clear();

создайте новую коллекцию и присвойте ItemsSource новую коллекцию:

PicSlideShowCollection = new ObservableCollection<string>();
slideShowControl.ItemsSource = PicSlideShowCollection;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...