我有一個DataTable與DataSource作爲ItemsSource。列數隨時間不同而不同。如果列的DataType屬於類A,我想使用DataTemplate來自定義單元格內容的外觀。WPF DataGrid - 數據綁定到DataTable單元格在CellTemplates DataTemplate
我已經在DataGrid上設置
AutoGenerateColumns="True"
,這樣在數據表中的所有列將產生。
我更換一個DataGridTemplateColumn的DataGridColumn如果數據類型是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中看起來是這樣的。
<DataTemplate x:Key="ATemplate">
<RadioButton Content="{Binding Name}" GroupName="{Binding GroupName}" IsChecked="{Binding IsSelected}" />
</DataTemplate>
的單選按鈕顯示,但我得到綁定錯誤的所有屬性,如
BindingExpression path error: 'IsSelected' property not found on 'object' ''DataRowView'
A類看起來像這樣
public class A
{
public string Name { get; set; }
public string GroupName { get; set; }
public bool IsSelected { get; set; }
}
我怎麼能數據綁定的DataTemplate中向右細胞和財產?
(如果你有,我沒有使用DataGrid_AutoGeneratingColumn這將是一個偉大的解決方案MVVM)
編輯
我已經沒有運氣嘗試這種解決方案了。當單元格不知道如何渲染類時,只會像平常一樣在單元格中顯示類名。
<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>
對不起,我的壞...那不行。 – Sheridan 2014-09-03 13:06:17