using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace RegionOfInterestChannels { public class RegionOfInterestChannelsDataTemplateSelector : DataTemplateSelector { public DataTemplate TextBlockDataTemplate { get; set; } public DataTemplate CheckBoxDataTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (item is ChannelEnabler) { GridViewRowPresenter presenter = (container as ContentPresenter).Parent as GridViewRowPresenter; if (presenter != null) { int checkStartColumn = -1; for (int i = 0; i < presenter.Columns.Count; i++) { ContentPresenter templated = VisualTreeHelper.GetChild(presenter, i) as ContentPresenter; var columnPropertyType = item.GetType().GetProperty(presenter.Columns[i].Header.ToString().Replace(" ", ""))?.GetValue(item, null).GetType(); if (null == columnPropertyType && checkStartColumn < 0) { checkStartColumn = i; } if (templated != null && templated.Equals(container as ContentPresenter)) { switch (Type.GetTypeCode(columnPropertyType)) { case TypeCode.String: (container as ContentPresenter).Tag = item.GetType().GetProperty(presenter.Columns[i].Header.ToString().Replace(" ", ""))?.GetValue(item, null); return TextBlockDataTemplate; case TypeCode.Boolean: default: (container as ContentPresenter).Tag = i - checkStartColumn; return CheckBoxDataTemplate; } } } } return CheckBoxDataTemplate; } return TextBlockDataTemplate; } } }