Mam DataGrid z DataTable z jako ItemsSource. Liczba kolumn różni się od czasu do czasu. Jeśli DataType kolumny jest klasy A, chcę użyć DataTemplate w celu dostosowania wyglądu zawartości komórki.WPF DataGrid - Databind do komórki DataTable w CellTemplates DataTemplate
Mam ustawiony
AutoGenerateColumns="True"
na DataGrid tak, że zostaną wygenerowane wszystkie kolumny w DataTable.
wymienić DataGridColumn z DataGridTemplateColumn jeśli typ danych jest typu A
private void DataGrid_AutoGeneratingColumn(object sender, system.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(A))
{
e.Column = new DataGridTemplateColumn
{
CellTemplate = (DataTemplate)Resources["ATemplate"],
Header = e.Column.Header,
HeaderTemplate = e.Column.HeaderTemplate,
HeaderStringFormat = e.Column.HeaderStringFormat
};
}
}
DataTemplate wygląda następująco.
<DataTemplate x:Key="ATemplate">
<RadioButton Content="{Binding Name}" GroupName="{Binding GroupName}" IsChecked="{Binding IsSelected}" />
</DataTemplate>
radiobutton jest pokazany, ale mam wiążących błędów dla wszystkich właściwości, jak
BindingExpression path error: 'IsSelected' property not found on 'object' ''DataRowView'
klasy A wygląda to
public class A
{
public string Name { get; set; }
public string GroupName { get; set; }
public bool IsSelected { get; set; }
}
Jak mogę databind DataTemplate w prawo komórka i własność?
(Jeśli masz rozwiązanie MVVM w których nie trzeba używać DataGrid_AutoGeneratingColumn byłoby wspaniale)
EDYCJA
Próbowałem to rozwiązanie też bez powodzenia. Tylko klasa jest wyświetlana w komórce jak zwykle, kiedy nie wie, jak ją wyrenderować.
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Items}">
<DataGrid.Resources>
<DataTemplate DataType="{x:Type viewModel:A}">
<RadioButton Content="{Binding Path=Name}" GroupName="{Binding Path=GroupName}" IsChecked="{Binding Path=IsSelected}" />
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
Tak, przepraszam, moja zła ... to nie zadziała. – Sheridan