Я пытаюсь создать матричное представление в WPF, используя элемент управления DataGrid. Я заполняю свой список источников предметов таблицей данных, доступной через конвертер. Каждая строка является массивом пользовательского типа класса (MatrixCell). В xaml на своей вкладке ресурсов я создаю DataTemplate для моего типа, MatrixCell, но при запуске приложения он не применяется. Кто-нибудь знает, что я делаю неправильно?
Моя DataGrid:
<DataGrid
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserSortColumns="False"
CanUserResizeColumns="False"
SelectionUnit="Cell"
IsReadOnly="True"
Name="matrixGrid">
<DataGrid.ItemsSource>
<Binding Path="Test" Converter="{StaticResource MatrixToDataViewConverter}"/>
</DataGrid.ItemsSource>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform Angle="270"/>
</TransformGroup>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
Мой конвертер:
public class MatrixToDataViewConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var myDataTable = new System.Data.DataTable();
if(value != null)
{
var test = value as ITest;
myDataTable.Columns.Add("-");
foreach (var column in test.Columns)
{
//populate columns
//...
}
var rows = new List<List<MatrixCell>>();
foreach (var matrixRow in test.MatrixRows)
{
var row = new List<MatrixCell>();
row.Add(new MatrixCell() { Content = $"{matrixRow.Id} {matrixRow.Name}" });
var temp = new MatrixCell[1 + test.Columns.Count];
foreach (var column in test.Columns)
{
//determine the Content value for each MatrixCell
//...
row.Add(new MatrixCell() { Content = content });
}
row.CopyTo(temp);
myDataTable.Rows.Add(temp);
}
}
return myDataTable.DefaultView;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Класс MatrixCell:
public class MatrixCell
{
public string Content { get; set; }
public bool IsComparerDone { get; set; }
//public override string ToString()
//{
// return Content;
//}
}
DataTemplate:
<DataTemplate DataType="{x:Type viewModels:MatrixCell}">
<TextBlock Text="{Binding Content}">
<!--<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsComparerResult}" Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>-->
</TextBlock>
</DataTemplate>
Просто для отображения MatrixCell.Content Я могу переопределить метод ToString, и он работает, но я хотел бы сделать это с помощью DataTemplate.
Это как выглядит мое текущее приложение: матричное представление