none
NullReferenceException в VirtualizingStackPanel.OnItemsChanged RRS feed

  • Вопрос

  • Доброго времени суток!

    Я использую WPF и net framework 4.0 (установлен 4.5).

    Когда я использую ListCollectionView между ItemsControl.ItemsSource и коллекцией объектов, то возникает исключение NullreferenceException. Однако, если установлен framerwork 4.0, то все работает нормально.

    В чем может быть дело?

    StackTrace:

    Source: PresentationFramework
    Exception: Object reference not set to an instance of an object
       
    at System.Windows.Controls.VirtualizingStackPanel.OnItemsChanged(Object sender, ItemsChangedEventArgs args)
    at System.Windows.Controls.VirtualizingPanel.OnItemsChangedInternal(Object sender, ItemsChangedEventArgs args)
    at System.Windows.Controls.Panel.OnItemsChanged(Object sender, ItemsChangedEventArgs args)
    at System.Windows.Controls.ItemContainerGenerator.OnRefresh()
    at System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
    at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
    at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
    at System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
    at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
    at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
    at System.Windows.Controls.ItemCollection.SetCollectionView(CollectionView view)
    at System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value, Func`2 GetSourceItem)
    at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
    at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
    at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
    at System.Windows.Data.BindingExpressionBase.Invalidate(Boolean isASubPropertyChange)
    at System.Windows.Data.BindingExpressionBase.Disconnect()
    at System.Windows.Data.BindingExpression.Disconnect()
    at System.Windows.Data.BindingExpression.Activate(Object item)
    at System.Windows.Data.BindingExpression.OnDataContextChanged(DependencyObject contextElement)
    at System.Windows.Data.BindingExpression.HandlePropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
    at System.Windows.Data.BindingExpressionBase.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
    at System.Windows.Data.BindingExpression.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
    at System.Windows.DependentList.InvalidateDependents(DependencyObject source, DependencyPropertyChangedEventArgs sourceArgs)
    at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
    at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
    at System.Windows.TreeWalkHelper.OnInheritablePropertyChanged(DependencyObject d, InheritablePropertyChangeInfo info, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.VisitNode(FrameworkElement fe, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.VisitNode(DependencyObject d, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.WalkLogicalChildren(FrameworkElement feParent, FrameworkContentElement fceParent, IEnumerator logicalChildren)
    at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren)
    at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d)
    at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.VisitNode(FrameworkElement fe, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.VisitNode(DependencyObject d, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.WalkLogicalChildren(FrameworkElement feParent, FrameworkContentElement fceParent, IEnumerator logicalChildren)
    at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren)
    at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d)
    at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.VisitNode(FrameworkElement fe, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.VisitNode(DependencyObject d, Boolean visitedViaVisualTree)
    at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren)
    at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d)
    at System.Windows.DescendentsWalker`1.StartWalk(DependencyObject startNode, Boolean skipStartNode)
    at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    • Изменено Alex Kozyrev 17 января 2014 г. 8:29
    16 января 2014 г. 4:42

Ответы

  • Проблема в том, что на машине под управлением Windows 8 без 4.5 никак (если ошибаюсь поправьте меня). Ошибка в этом случае возникает вне зависимости от наличия framework 4.0.

    Это проверенное утверждение? Я как бы тоже самое дела на Windows 8 и все работает. Но у меня установлены Framework'и начиная с 3,5

    Программа берет целевой, если его нет берет старший. По идее так.


    VB.Net - WPF, WinRT, WP


    17 января 2014 г. 9:20
    Отвечающий

Все ответы

  • Это Русский MSDN, задавайте вопросы на русском. Или пишите в английской ветке.

    Сделаем содержимое сообщества лучше, вместе!

    16 января 2014 г. 11:08
    Модератор
  • Переписал текст вопроса на русском.
    17 января 2014 г. 8:31
  • В тексте ошибки проскакивает VirtualizingStackPanel

    Помнится говорили, что в 4.5 ее значительно усовершенствовали. Вот и выходит что классы ListCollectionView и ItemsControl не могут нормально взаимодействовать исправленным 4.5.

    Скорее всего если у пользователя будет установлен и 4 и 4.5, то проблемы не будет.

    UPD. В общем всегда ориентируйтесь на целевую платформу. Пишите по 4.0, значит пользователю рекомендуете ее установить.


    VB.Net - WPF, WinRT, WP

    17 января 2014 г. 9:12
    Отвечающий
  • Проблема в том, что на машине под управлением Windows 8 без 4.5 никак (если ошибаюсь поправьте меня). Ошибка в этом случае возникает вне зависимости от наличия framework 4.0.

    17 января 2014 г. 9:18
  • Проблема в том, что на машине под управлением Windows 8 без 4.5 никак (если ошибаюсь поправьте меня). Ошибка в этом случае возникает вне зависимости от наличия framework 4.0.

    Это проверенное утверждение? Я как бы тоже самое дела на Windows 8 и все работает. Но у меня установлены Framework'и начиная с 3,5

    Программа берет целевой, если его нет берет старший. По идее так.


    VB.Net - WPF, WinRT, WP


    17 января 2014 г. 9:20
    Отвечающий