绑定的可观察集合中GeneratorPosition错误。

3

我正在使用一个转换幻灯片控件,它有一个可观察的字符串集合绑定到itemsource。这些字符串是幻灯片中每张图片的文件路径。当我第一次加载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);                    
            }
        }           
    }

然而,我有一个按钮,允许用户更改幻灯片中使用的图像目录并重新运行上述方法。当执行该操作时,我会收到以下错误消息:

传递给Remove的GeneratorPosition“-1,1”没有偏移量等于0。

这发生在PicSlideShowCollection.Clear()指令上。如果我注释掉该指令,则新目录中的图像将被添加到原始目录图片中,这不是我想要的。
我知道这与PicSlideShowCollection作为幻灯片控件的项源有关,但我需要知道如何防止出现此错误。
谢谢!
2个回答

1
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;

请为这段代码添加一些说明。它如何与原始代码配合,又是如何解决问题的? - m69 ''snarky and unwelcoming''

0

我无法解释为什么会出现这个错误。GeneratorPosition被ItemContainerGenerator用于ItemsControl,当您绑定到其ItemsSource属性并向源集合添加或删除项时,它应该可以正常工作。当然,清除源集合也是有效的操作。

问题的一个可能的解决方法是每次切换到另一个图像目录时重置ItemsSource。因此,不要清除现有集合。

PicSlideShowCollection.Clear();

创建一个新的集合并将ItemsSource设置为新的集合:
PicSlideShowCollection = new ObservableCollection<string>();
slideShowControl.ItemsSource = PicSlideShowCollection;

是的,我已经尝试过了。我在这种方法中使用了另一个集合,并尝试将ItemsSource切换到它,但是出现了相同的错误。这可能与幻灯片一次迭代源中的项目有关,当我更新集合时,它处于某个项目位置或索引上吗? - sunriser
是的,但我会称其为幻灯片控件中的一个错误。修改源集合应始终是可能的。控件的文档是否提到了禁止更改源集合的可能状态? - Clemens
很遗憾,没有办法解决这个问题。我已经看了整个API指南,并查看了示例代码,但并没有找到相关处理方法。我尝试了其他方法,比如将控件的启用状态设置为false再重新启用,将itemsource设置为null然后重新绑定到集合,使用slideshowcontrol的Items成员手动添加项目,但是依然产生相同的错误。:( - sunriser
不幸的是,CodePlex上的Transitionals主页上写道:“请注意,Transitionals目前没有任何活跃的贡献者。您仍然可以自由下载二进制文件或源代码,并在自己的项目中使用它;实际上,Transitionals是稳定的,并已用于几个商业软件包。但请注意,目前没有人监控讨论组或解决问题。” - Clemens
当然,您可以获取源代码并调试您的问题。 - Clemens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接