/ src / modules / cmdpal / Microsoft.CmdPal.UI / Converters / ListItemTemplateSelector.cs
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  }