Browse Source

Remove TabControl.HeaderDisplayMemberBinding.

As `DisplayMemberBinding` should select the member for the header (in WPF it's `DisplayMemberPath`). Also set `TabItem.TabStripPlacement`.
Steven Kirk 2 years ago
parent
commit
1950e4b0a3
2 changed files with 15 additions and 19 deletions
  1. 1 1
      samples/ControlCatalog/Pages/TabControlPage.xaml
  2. 14 18
      src/Avalonia.Controls/TabControl.cs

+ 1 - 1
samples/ControlCatalog/Pages/TabControlPage.xaml

@@ -53,7 +53,7 @@
                 <TabControl
                     Items="{Binding Tabs}"
                     Margin="0 16"
-                    HeaderDisplayMemberBinding="{Binding Header, x:DataType=viewModels:TabControlPageViewModelItem}"
+                    DisplayMemberBinding="{Binding Header, x:DataType=viewModels:TabControlPageViewModelItem}"
                     TabStripPlacement="{Binding TabPlacement}">
                     <TabControl.ContentTemplate>
                         <DataTemplate x:DataType="viewModels:TabControlPageViewModelItem">

+ 14 - 18
src/Avalonia.Controls/TabControl.cs

@@ -57,12 +57,6 @@ namespace Avalonia.Controls
         /// </summary>
         public static readonly StyledProperty<IDataTemplate?> SelectedContentTemplateProperty =
             AvaloniaProperty.Register<TabControl, IDataTemplate?>(nameof(SelectedContentTemplate));
-
-        /// <summary>
-        /// Defines the <see cref="HeaderDisplayMemberBinding" /> property
-        /// </summary>
-        public static readonly StyledProperty<IBinding?> HeaderDisplayMemberBindingProperty =
-            AvaloniaProperty.Register<HeaderedItemsControl, IBinding?>(nameof(HeaderDisplayMemberBinding));
         
         /// <summary>
         /// The default value for the <see cref="ItemsControl.ItemsPanel"/> property.
@@ -141,16 +135,6 @@ namespace Avalonia.Controls
             get { return GetValue(SelectedContentTemplateProperty); }
             internal set { SetValue(SelectedContentTemplateProperty, value); }
         }
-        
-        /// <summary>
-        /// Gets or sets the <see cref="IBinding"/> to use for binding to the display member of each tab-items header.
-        /// </summary>
-        [AssignBinding]
-        public IBinding? HeaderDisplayMemberBinding
-        {
-            get { return GetValue(HeaderDisplayMemberBindingProperty); }
-            set { SetValue(HeaderDisplayMemberBindingProperty, value); }
-        }
 
         internal ItemsPresenter? ItemsPresenterPart { get; private set; }
 
@@ -172,8 +156,12 @@ namespace Avalonia.Controls
         {
             base.PrepareContainerForItemOverride(element, item, index);
             
-            if (element is HeaderedContentControl hcc && ContentTemplate is { } ct)
-                hcc.ContentTemplate = ct;
+            if (element is TabItem tabItem)
+            {
+                if (ContentTemplate is { } ct)
+                    tabItem.ContentTemplate = ct;
+                tabItem.SetValue(TabStripPlacementProperty, TabStripPlacement);
+            }
 
             if (index == SelectedIndex && element is ContentControl container)
             {
@@ -268,5 +256,13 @@ namespace Avalonia.Controls
                 }
             }
         }
+
+        protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+        {
+            base.OnPropertyChanged(change);
+
+            if (change.Property == TabStripPlacementProperty)
+                RefreshContainers();
+        }
     }
 }