在大多数情况,可能界面和后台代码不是同一个人写,写界面的人永远都想着如何让自己的控件能够复用,不用为每一次需求就写一次,以DataGrid为例,部分人可能直接就自己写每一列的显示模板,这样就根据每一次需求去写这个显示的模板,但这对于某些需要不断变更显示的需求,就显得有点不够用。
DataGrid我们要根据数据类型,而去对应显示,只需要在OnAutoGeneratingColumn这个事件中重写列就可以。
例如:
protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e)
{
if(this.ItemsSource.GetType() == typeof(DataView))
{
e.Column = CreateColumn(e.PropertyType, e.PropertyName)
}
base.OnAutoGeneratingColumn(e);
}
private DataGridTemplateColumn CreateColumn(Type type, string propertyName)
{
DataGridTemplateColumn column = new DataGridTemplateColumn();
column.Header = propertyName;
DataTemplate dataTmeplate = new DataTemplate();
if(type == typeof(AA))
{
FrameworkElementFactory fefContent = new FrameworkElemtFac