diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs
index 1123f42afa..06f0d54e4c 100644
--- a/src/Avalonia.Controls/ItemsControl.cs
+++ b/src/Avalonia.Controls/ItemsControl.cs
@@ -460,13 +460,19 @@ namespace Avalonia.Controls
ic.ItemContainerTheme = ict;
}
- // This condition is separate because HeaderedItemsControl needs to also run the
- // ItemsControl preparation.
+ // These conditions are separate because HeaderedItemsControl and
+ // HeaderedSelectingItemsControl also need to run the ItemsControl preparation.
if (container is HeaderedItemsControl hic)
{
hic.Header = item;
hic.HeaderTemplate = itemTemplate;
- hic.PrepareItemContainer();
+ hic.PrepareItemContainer(this);
+ }
+ else if (container is HeaderedSelectingItemsControl hsic)
+ {
+ hsic.Header = item;
+ hsic.HeaderTemplate = itemTemplate;
+ hsic.PrepareItemContainer(this);
}
}
diff --git a/src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs b/src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs
index 55d2ec7506..273271d2ce 100644
--- a/src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs
@@ -13,7 +13,7 @@ namespace Avalonia.Controls.Primitives
public class HeaderedItemsControl : ItemsControl, IContentPresenterHost
{
private IDisposable? _itemsBinding;
- private bool _prepareItemContainerOnAttach;
+ private ItemsControl? _prepareItemContainerOnAttach;
///
/// Defines the property.
@@ -69,10 +69,10 @@ namespace Avalonia.Controls.Primitives
{
base.OnAttachedToLogicalTree(e);
- if (_prepareItemContainerOnAttach)
+ if (_prepareItemContainerOnAttach is not null)
{
- PrepareItemContainer();
- _prepareItemContainerOnAttach = false;
+ PrepareItemContainer(_prepareItemContainerOnAttach);
+ _prepareItemContainerOnAttach = null;
}
}
@@ -97,7 +97,7 @@ namespace Avalonia.Controls.Primitives
return false;
}
- internal void PrepareItemContainer()
+ internal void PrepareItemContainer(ItemsControl parent)
{
_itemsBinding?.Dispose();
_itemsBinding = null;
@@ -106,18 +106,18 @@ namespace Avalonia.Controls.Primitives
if (item is null)
{
- _prepareItemContainerOnAttach = false;
+ _prepareItemContainerOnAttach = null;
return;
}
- var headerTemplate = HeaderTemplate;
+ var headerTemplate = HeaderTemplate ?? parent.ItemTemplate;
if (headerTemplate is null)
{
if (((ILogical)this).IsAttachedToLogicalTree)
headerTemplate = this.FindDataTemplate(item);
else
- _prepareItemContainerOnAttach = true;
+ _prepareItemContainerOnAttach = parent;
}
if (headerTemplate is ITreeDataTemplate treeTemplate &&
diff --git a/src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs
index 49fc58c8f5..88ca1f1fe1 100644
--- a/src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs
@@ -1,5 +1,8 @@
+using System;
using Avalonia.Collections;
using Avalonia.Controls.Presenters;
+using Avalonia.Controls.Templates;
+using Avalonia.Data;
using Avalonia.LogicalTree;
namespace Avalonia.Controls.Primitives
@@ -9,12 +12,21 @@ namespace Avalonia.Controls.Primitives
///
public class HeaderedSelectingItemsControl : SelectingItemsControl, IContentPresenterHost
{
+ private IDisposable? _itemsBinding;
+ private ItemsControl? _prepareItemContainerOnAttach;
+
///
/// Defines the property.
///
public static readonly StyledProperty