@ -110,10 +110,28 @@ namespace Avalonia.Controls
}
}
// We need to clear the datacontext to prevent crashes from happening,
// however we only do that if we were the ones setting it.
// That is when one of the following is the case (numbering taken from line ~642):
// 1.2 No ItemTemplate, data is not a UIElement
// 2.1 ItemTemplate, data is not FrameworkElement
// 2.2.2 Itemtemplate, data is FrameworkElement, ElementFactory returned Element different to data
//
// In all of those three cases, we the ItemTemplateShim is NOT null.
// Luckily when we create the items, we store whether we were the once setting the DataContext.
public void ClearElementToElementFactory ( IControl element )
{
_ owner . OnElementClearing ( element ) ;
var virtInfo = ItemsRepeater . GetVirtualizationInfo ( element ) ;
virtInfo . MoveOwnershipToElementFactory ( ) ;
// During creation of this object, we were the one setting the DataContext, so clear it now.
if ( virtInfo . MustClearDataContext )
{
element . DataContext = null ;
}
if ( _ owner . ItemTemplateShim ! = null )
{
_ owner . ItemTemplateShim . RecycleElement ( _ owner , element ) ;
@ -127,9 +145,6 @@ namespace Avalonia.Controls
}
}
var virtInfo = ItemsRepeater . GetVirtualizationInfo ( element ) ;
virtInfo . MoveOwnershipToElementFactory ( ) ;
if ( _l astFocusedElement = = element )
{
// Focused element is going away. Remove the tracked last focused element
@ -597,11 +612,14 @@ namespace Avalonia.Controls
{
virtInfo = ItemsRepeater . CreateAndInitializeVirtualizationInfo ( element ) ;
}
// Clear flag
virtInfo . MustClearDataContext = false ;
if ( data ! = element )
{
// Prepare the element
element . DataContext = data ;
virtInfo . MustClearDataContext = true ;
}
virtInfo . MoveOwnershipToLayoutFromElementFactory (