ListItemTemplateSelector.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using Microsoft.CmdPal.Core.ViewModels; 6 using Microsoft.UI.Xaml; 7 using Microsoft.UI.Xaml.Controls; 8 9 namespace Microsoft.CmdPal.UI; 10 11 public sealed partial class ListItemTemplateSelector : DataTemplateSelector 12 { 13 public DataTemplate? ListItem { get; set; } 14 15 public DataTemplate? Separator { get; set; } 16 17 public DataTemplate? Section { get; set; } 18 19 protected override DataTemplate? SelectTemplateCore(object item, DependencyObject container) 20 { 21 DataTemplate? dataTemplate = ListItem; 22 23 if (container is ListViewItem listItem) 24 { 25 if (item is ListItemViewModel element) 26 { 27 if (container is ListViewItem li && element.IsSectionOrSeparator) 28 { 29 li.IsEnabled = false; 30 li.AllowFocusWhenDisabled = false; 31 li.AllowFocusOnInteraction = false; 32 li.IsHitTestVisible = false; 33 dataTemplate = string.IsNullOrWhiteSpace(element.Section) ? Separator : Section; 34 } 35 else 36 { 37 listItem.IsEnabled = true; 38 listItem.AllowFocusWhenDisabled = true; 39 listItem.AllowFocusOnInteraction = true; 40 listItem.IsHitTestVisible = true; 41 } 42 } 43 } 44 45 return dataTemplate; 46 } 47 }