我想通过AutoGeneratedColumns设置标头FirstName,LastName。 我尝试了这段代码,但是DataGrid Header显示了Name1,Name2。
我知道,DataGridColumns可以创建标题。 但是我想通过AutoGeneratedColumns设置标题。
有什么办法吗?
感谢您抽出宝贵的时间对此进行评论!
ViewModel
public class DataGridItems
{
[Description("FirstName")]
public string Name1 { get; set; }
[Description("LastName")]
public string Name2 { get; set; }
}
MainWindow
public partial class MainWindow : Window
{
public List<DataGridItems> ItemsSource { get; set; }
public MainWindow()
{
InitializeComponent();
this.DataContext = Enumerable.Range(1, 10).Select(a => new DataGridItems { Name1 = a.ToString(), Name2 = "Last" + a.ToString() });
}
}
XAML
<Grid>
<DataGrid ItemsSource="{Binding}"/>
</Grid>
答案 0 :(得分:1)
您可以在视图中处理AutoGeneratingColumn
事件:
public partial class MainWindow : Window
{
public List<DataGridItems> ItemsSource { get; set; }
public MainWindow()
{
InitializeComponent();
this.DataContext = Enumerable.Range(1, 10).Select(a => new DataGridItems { Name1 = a.ToString(), Name2 = "Last" + a.ToString() });
}
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DescriptionAttribute descriptionAttribute = typeof(DataGridItems)
.GetProperty(e.PropertyName)?
.GetCustomAttributes(true)?
.OfType<DescriptionAttribute>()
.FirstOrDefault();
if (descriptionAttribute != null)
e.Column.Header = descriptionAttribute.Description;
}
}
XAML:
<DataGrid ItemsSource="{Binding}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"/>
提供在视图中设置DataGrid
的标头的功能不是视图模型的责任。这应该在视图或控件中实现,就像在XAML标记中将标头设置为某些固定值时一样。