public MainWindowViewModel()
        {
            Items = new ObservableCollection <IListItem>(new List <IListItem>
            {
                new SomeListItem {
                    Color = Brushes.Yellow, Label = "Item One"
                },
                new SomeOtherListItem {
                    Description = "Some useless description for item two", Label = "Item Two"
                },
                new SomeListItem {
                    Color = Brushes.Yellow, Label = "Item Three"
                },
                new SomeOtherListItem {
                    Description = "Some useless description for item four", Label = "Item Four"
                }
            });

            var factory = new ItemTemplateFactory();

            factory.Register(typeof(SomeListItem), (DataTemplate)Application.Current.FindResource("SomeListItem_Template"));
            factory.Register(typeof(SomeOtherListItem), (DataTemplate)Application.Current.FindResource("SomeOtherListItem_Template"));

            ItemTemplateSelector = new ItemTemplateSelector(factory);
        }
 public ItemTemplateSelector(ItemTemplateFactory factory) => _factory = factory ?? throw new ArgumentNullException(nameof(factory));