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