48 lines
2.3 KiB
C#
48 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |