我有一个ObservableCollection<object>
,它绑定到代码隐藏中的DataGrid
,我添加列并为代码隐藏中这些列生成绑定。
private void RgvReportDisplay_Loaded( object sender, RoutedEventArgs e )
{
if (RgvReportDisplay.Columns.Count == 0)
{
foreach (var item in ((ReportsQueryHolder)DataContext).Collection[0].GetType().GetProperties())
{
Binding B = null;
if (item.Name.ToLower().Contains("date") || item.Name.ToLower().Contains("scheduledpickup"))
{
B = new Binding(item.Name + ".Date");
//B.Converter = new DateConverter();
B.Mode = BindingMode.OneWay;
}
else
{
B = new Binding(item.Name);
B.Mode = BindingMode.OneWay;
}
RgvReportDisplay.Columns.Add(new Microsoft.Windows.Controls.DataGridTextColumn()
{
Header = item.Name,
Binding = B
});
}
}
}
当我在绑定之前查看集合列表时,日期看起来是正确的。以下是我的即时窗口中的内容:
((ReportsQueryHolder)DataContext).Collection[0]
{DataTableType}
Amount: "749.00"
Collector: "John Smith"
CreatedDate: {3/11/2014 8:00:39 PM}
LocationName: "QUICK STOP "
LocationNumber: "37"
ScheduledPickup: {3/12/2014 12:00:00 AM}
我的约会搞砸了。现在,当它绑定到DataGrid时,我的约会对象会随机说出一些事情。显示内容如下:
10/12/8524
因此,2014年12月3日是如何转换为8524年12月10日的。这曾经奏效,但现在不行了。
添加:
因此,我绑定了一个nullable
DateTime
,这就是问题的原因。为什么声明这些字段是DateTime?
会导致这种情况?
我最终在日期转换器中处理了null,因为null显示为DateTime。因此,我只是检查了一下MinValue,然后返回了一个基于的字符串