簡體   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