1.设置ColumnGeneratorTemplate
<dxg:GridControl
ItemsSource="{Binding Items}"
ColumnsSource="{Binding Columns}"
SelectionMode="Row">
<dxg:GridControl.View>
<dxg:TableView ShowGroupPanel="False" AutoWidth="True" />
</dxg:GridControl.View>
<dxg:GridControl.ColumnGeneratorTemplate>
<DataTemplate>
<ContentControl>
<dxg:GridColumn
FieldName="{Binding Field}"
Header="{Binding Header}"
Width="{Binding Width}"
AllowEditing="{Binding Editable}"/>
</ContentControl>
</DataTemplate>
</dxg:GridControl.ColumnGeneratorTemplate>
</dxg:GridControl>
2.定义ColumnAttribute
class ColumnAttribute : Attribute
{
public ColumnAttribute()
{
Width = "*";
}
public string Header { get; set; }
public DefaultBoolean Editable { get; set; }
public string Width { get; set; }
}
class StudentViewModel : ViewModelBase
{
[Column(Header = "姓名")]
public string Name { get; set; }
[Column(Header = "性别")]
public string Sex { get; set; }
[Column(Header = "年龄")]
public int Age { get; set; }
}
3.数据绑定
class MainViewModel : ViewModelBase
{
public MainViewModel()
{
Columns = GetColumns(typeof(StudentViewModel));
BuildTestDatas();
}
public IList<ColumnViewModel> Columns { get; set; }
public IList<StudentViewModel> Items { get; set; }
private void BuildTestDatas()
{
Items = new List<StudentViewModel>();
Items.Add(new StudentViewModel { Name = "张三", Sex = "男性", Age = 10 });
Items.Add(new StudentViewModel { Name = "李四", Sex = "男性", Age = 10 });
Items.Add(new StudentViewModel { Name = "王五", Sex = "男性", Age = 10 });
Items.Add(new StudentViewModel { Name = "赵六", Sex = "男性", Age = 10 });
}
private IList<ColumnViewModel> GetColumns(Type t)
{
var columns = new List<ColumnViewModel>();
foreach (var property in t.GetProperties())
{
var attributes = property.GetCustomAttributes(typeof(ColumnAttribute), false);
if (attributes != null && attributes.Any())
{
var columnAttribute = attributes[0] as ColumnAttribute;
var columnViewModel = new ColumnViewModel
{
Header = columnAttribute.Header,
Field = property.Name,
Editable = columnAttribute.Editable,
Width = columnAttribute.Width
};
columns.Add(columnViewModel);
}
}
return columns;
}
}
public class ColumnViewModel : ViewModelBase
{
public string Header { get; set; }
public string Field { get; set; }
public DefaultBoolean Editable { get; set; }
public string Width { get; set; }
}
示例下载:https://pan.baidu.com/s/1hFeAZYsiFjqLMCvcaAyabQ phbi