using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using OwlCore.AbstractUI.ViewModels; using CommunityToolkit.Diagnostics; using OwlCore.AbstractUI.Models; namespace OwlCore.WinUI.AbstractUI.Themes { /// /// Selects the template that is used for an based on the . /// public class AbstractMultiChoiceTypeTemplateSelector : DataTemplateSelector { /// /// The data template used to display an . /// public DataTemplate? ComboBoxTemplate { get; set; } /// /// The data template used to display an . /// public DataTemplate? RadioButtonTemplate { get; set; } /// protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { if (item is AbstractMultiChoiceViewModel viewModel) { return viewModel.PreferredDisplayMode switch { AbstractMultiChoicePreferredDisplayMode.Dropdown => ComboBoxTemplate ?? ThrowHelper.ThrowArgumentNullException(), AbstractMultiChoicePreferredDisplayMode.RadioButtons => RadioButtonTemplate ?? ThrowHelper.ThrowArgumentNullException(), _ => throw new NotImplementedException(), }; } return base.SelectTemplateCore(item, container); } } }