[英]How to retrieve Data Type from DataGrid of each column + WPF
我需要修改每个列标题的名称以反映每个列的单位。 当前,我的DataGrid绑定到包含各种属性的列表。 加载数据网格时,每列的标题应采用“ HeaderName(单位)”格式。 我很难检索属性的类型以显示单位。 如何从DataGrid获取每个列的类型?
现在,我正在对它进行如下硬编码,如果我知道该类型,则无需硬编码就可以检索这些单元。
private void DataGrid_Loaded(object sender, RoutedEventArgs e)
{
dg.Columns[0].Header = dg.Columns[0].Header + "(m/s)"; //=> Speed (m/s)
dg.Columns[1].Header = dg.Columns[1].Header + "(s)"; //=> Duration (s)
...
dg.Columns[7].Header = dg.Columns[7].Header + "(s)"; //=> Duration (s)
}
我的样本xaml:
<DataGrid ItemsSource="{Binding Path=ObjectList}"
SelectionMode="Single" Name="dg" Loaded="DataGrid_Loaded"/>
对象列表
public class ObjectList
{
public Speed Speed { get; set; }
public Time Duration { get; set; }
public Ampere Current { get; set; }
... (almost 8 properties)
}
我不希望在xaml中绑定集合中的每种类型。 我想像上面的xaml一样保持对整个集合本身的绑定。
有没有简单或好的方法来实现这一目标?
为了提高性能,我将每种类型的静态映射声明为要显示的格式字符串:
private static Dictionary<Type, string> UnitStrings = new Dictionary<Type, string>
{
{typeof(double), "m/s"},
{typeof(int), "s"}
};
我也假设您是在问这个问题,因为您正在自动生成列,在这种情况下,AutoGeneratingColumn是更好的事件处理程序:
<DataGrid ItemsSource="{Binding MyItems}" AutoGeneratingColumn="OnAutoGeneratingColumn" />
然后,只需在处理程序中进行字典查找即可:
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (UnitStrings.ContainsKey(e.PropertyType))
e.Column.HeaderStringFormat = $"{{0}} ({UnitStrings[e.PropertyType]})";
}
结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.