Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在攻击Silverlight NotifyCollectionChangedEventArgs以支持多个项目时有何用处?_Silverlight_Inotifycollectionchanged - Fatal编程技术网

在攻击Silverlight NotifyCollectionChangedEventArgs以支持多个项目时有何用处?

在攻击Silverlight NotifyCollectionChangedEventArgs以支持多个项目时有何用处?,silverlight,inotifycollectionchanged,Silverlight,Inotifycollectionchanged,NotifyCollectionChangedEventArgs的Silverlight版本与完整框架版本不同,它不接受多个(添加、更改、删除)项。获取列表的构造函数实际上丢失了,因此Microsoft似乎有意阻止这种使用。实际上,如果传入一个项集合,它们只是嵌套为内部集合的第一项 然而!由于NewItems和OldItems成员属于IList类型,因此它们不是不可变的,可以增长。我制作了以下助手来测试这个想法: private NotifyCollectionChangedEventA

NotifyCollectionChangedEventArgs的Silverlight版本与完整框架版本不同,它不接受多个(添加、更改、删除)项。获取列表的构造函数实际上丢失了,因此Microsoft似乎有意阻止这种使用。实际上,如果传入一个项集合,它们只是嵌套为内部集合的第一项

然而!由于NewItems和OldItems成员属于IList类型,因此它们不是不可变的,可以增长。我制作了以下助手来测试这个想法:

    private NotifyCollectionChangedEventArgs CreateEventArgsWithMultiple(NotifyCollectionChangedAction action, IEnumerable items, int newStartingIndex)
    {
        NotifyCollectionChangedEventArgs eventArgs = null;

        foreach (var item in items)
        {
            if (eventArgs == null)
            {
                eventArgs = new NotifyCollectionChangedEventArgs(action, item, newStartingIndex);
            }
            else
            {
                eventArgs.NewItems.Add(item);
            }
        }

        return eventArgs;
    }
我还没有看到任何问题,但我正在寻找Silverlight这个特殊角落的经验和投入。我应该费心像这样批量添加,还是只使用重置

顺便说一下,这是在WindowsPhone7.1(Mango)上实现的


编辑:跟踪Erno的评论。微软在MSDN上说,可以“一般”假设NewItems只有一个元素,甚至建议使用NewItems[0]访问它的快捷方式。因此,他们保留了IList签名以表示“兼容性”,但随后继续破坏类型的含义。令人失望。

我没有遇到任何问题,但答案是“不要这样做!”(除非您只是将参数传递给您编写的代码)


原因(正如在评论中所说的)是Silverlight中可能有代码假定只有一项。即使没有今天,也可能有明天,当新版本的Silverlight更加依赖于这个假设时,你肯定不希望你的应用程序崩溃。

我没有遇到任何问题,但答案是“不要这样做!”(除非你只是将参数传递给你编写的代码)


原因(正如在评论中所说的)是Silverlight中可能有代码假定只有一项。即使没有今天,也可能有明天,当新版本的Silverlight出现时,你肯定不想让你的应用程序崩溃,因为新版本的Silverlight更加依赖于这一假设。

“看来微软有意阻止这种使用”,这可能是因为微软没有时间添加它,或者这是他们用来缩减框架大小的领域之一。但这也可能意味着Silverlight中的消费代码假定只有一个项目。那就太糟糕了。我可以确保我自己的用例工作(例如绑定到ItemsSource),但我很好奇是否有其他人尝试过它并遇到了问题。事实上,它可能意味着任何事情。我只是想提醒大家不要急于下结论。“看来微软有意阻止这种使用”,这可能是因为微软没有时间添加它,或者这是他们用来缩减框架大小的领域之一。但这也可能意味着Silverlight中的消费代码假定只有一个项目。那就太糟糕了。我可以确保我自己的用例工作(例如绑定到ItemsSource),但我很好奇是否有其他人尝试过它并遇到了问题。事实上,它可能意味着任何事情。我只是想提醒大家不要急于下结论。