繁体   English   中英

如何从每列+ WPF的DataGrid检索数据类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM