Exception when removing RadTabItem

6 posts, 0 answers
  1. Charles Bates
    Charles Bates avatar
    45 posts
    Member since:
    Feb 2010

    Posted 06 Oct 2010 Link to this post

    Hello,
    VS2010, SL 4, RadControls 2010.1.422.1030

    We are trying to move a RadTabItem from one RadTabControl to another.

    foreach (RadTabItem ti in _leftTabCntrl.Items)
    {
        if (ti.IsSelected)
        {
            removeLeftMapItem(ti);
            addRightMapItem(ti);
            ti.IsSelected = true;
     
            break;
        }
    }
    private void removeLeftMapItem(RadTabItem item)
    {
         _leftTabCntrl.SelectionChanged -= TabCntrl_SelectionChanged;
        _leftTabCntrl.Items.Remove(item);
        --_countLeftMaps;
         _leftTabCntrl.SelectionChanged += TabCntrl_SelectionChanged;
    }

    When Remove() executes, get this exception:
       at MS.Internal.XcpImports.Collection_RemoveAt[T](PresentationFrameworkCollection`1 collection, UInt32 index)
       at System.Windows.PresentationFrameworkCollection`1.RemoveAtImpl(Int32 index)
       at System.Windows.Controls.ItemsControl.RemoveContainerForPosition(GeneratorPosition position)
       at System.Windows.Controls.ItemsControl.OnItemsChangedHandler(Object sender, ItemsChangedEventArgs args)
       at System.Windows.Controls.Primitives.ItemsChangedEventHandler.Invoke(Object sender, ItemsChangedEventArgs e)
       at System.Windows.Controls.ItemContainerGenerator.RemoveItem(Object item, Int32 itemIndex, DependencyObject container, Int32 containerCount, GeneratorPosition position, ItemBlock block, Int32 offsetFromBlockStart, Boolean raiseReplaceInsteadOfRemove)
       at System.Windows.Controls.ItemContainerGenerator.OnItemRemoved(Object item, Int32 itemIndex, Boolean raiseReplaceInsteadOfRemove)
       at System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.ICollectionChangedListener.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
       at System.Windows.Controls.WeakCollectionChangedListener.SourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
       at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
       at System.Windows.Controls.ItemCollection.NotifyCollectionChanged(NotifyCollectionChangedEventArgs e)
       at System.Windows.Controls.ItemCollection.RemoveAtImpl(Int32 index)
       at System.Windows.Controls.ItemCollection.RemoveImpl(Object value)
       at System.Windows.Controls.ItemCollection.RemoveInternal(Object value)
       at System.Windows.PresentationFrameworkCollection`1.Remove(T value)
       at MsiMapperClient.V_Meeting.removeLeftMapItem(RadTabItem item)

    What are we doing wrong?
    Thanks for any advice...



  2. Zarko
    Admin
    Zarko avatar
    755 posts

    Posted 07 Oct 2010 Link to this post

    Hello Charles Bates,

     I've tried to reproduce your problem, but I wasn't able to, so could you please examine the attached project and see if you still have that issue ?

    Sincerely yours,
    Zarko
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. DevCraft banner
  4. Charles Bates
    Charles Bates avatar
    45 posts
    Member since:
    Feb 2010

    Posted 08 Oct 2010 Link to this post

    Thanks for the reply.
    Here is another piece in the puzzle...
    We are trying to add Context Menus to the objects on our main Canvas.
    When the object containing the Canvas is loaded, we do this:
    CommandManager.SetCommandBindings(this, Model.GetCommandBindings());
    var contextMenu = new ContextMenu();
    var menuItem = new RadMenuItem();
    var binding = new Binding("SomeCommand.Text");
    BindingOperations.SetBinding(menuItem, HeaderedItemsControl.HeaderProperty, binding);
    binding = new Binding("SomeCommand");
    BindingOperations.SetBinding(menuItem, RadMenuItem.CommandProperty, binding);
    contextMenu.Items.Add(menuItem);
    menuItem = new RadMenuItem();
    binding = new Binding("OtherCommand.Text");
    BindingOperations.SetBinding(menuItem, HeaderedItemsControl.HeaderProperty, binding);
    binding = new Binding("OtherCommand");
    BindingOperations.SetBinding(menuItem, RadMenuItem.CommandProperty, binding);
    contextMenu.Items.Add(menuItem);
    //contextMenu.SetMenu(this, contextMenu);
    By commenting the one line ("contextMenu.SetMenu(this, contextMenu)"), the problem with removing the RadTabItem from the collection goes away -- our application works as it did before trying to add the context menu.


  5. Tina Stancheva
    Admin
    Tina Stancheva avatar
    3298 posts

    Posted 13 Oct 2010 Link to this post

    Hello Charles Bates,

    Unfortunately, we still couldn't reproduce the issue. Can you please try modifying the sample project that Zarko sent to reproduce the issue so that we can further investigate it?

    Thank you in advance.

    All the best,
    Tina Stancheva
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  6. Kais
    Kais avatar
    18 posts
    Member since:
    Jan 2011

    Posted 01 Mar 2011 Link to this post

    Im having a similar issue.

    I set a RadContextMenu on a RadTabItem using the xaml Im having a similar issue. I set a RadContextMenu on a RadTabItem using the xaml 

    telerik:RadContextMenu.ContextMenu="{StaticResource TabItemContextMenu}"

    This is set in a Style targeted RadTabItem. 

    Then my RadTabControl is bound to a ViewModel collectoin ObservableCollection<TabItemViewModel> so the RadTabItems are generated internally. Finally when a tab item is closed by removing the ViewModel from the observablecollection I occasionally get an exception.

    The exception (as I have source license for Telerik) is genrated in RadContextMenu.ClearReferences(), the line
    this.elementWithContextMenu.Unloaded -= new RoutedEventHandler(this.OnElementWithContextMenuUnloaded);

    On some occasions elementWithContextMenu is null. This method is called OnContextMenuChanged.

    I am not sure what's happening here but sometimes the RadTabItem that the context menu is associated with internally gets nulled before the context menu is cleared. Strange?

  7. Tina Stancheva
    Admin
    Tina Stancheva avatar
    3298 posts

    Posted 07 Mar 2011 Link to this post

    Hello Kais,

    Thank you for the detailed information. However, we still cannot reproduce the issue on our side and therefore we cannot be sure in which cases it comes up and what might be causing it. This is why I wanted to ask you for your assistance. I prepared a sample project that we used for testing. If you can have a look at it and let us know if it works for you or if illustrates your scenario correctly, that will greatly help us.

    Thank you in advance for your cooperation.

    Greetings,
    Tina Stancheva
    the Telerik team
    Registration for Q1 2011 What’s New Webinar Week is now open. Mark your calendar for the week starting March 21st and book your seat for a walk through all the exciting stuff we ship with the new release!
Back to Top
DevCraft banner