【发布时间】:2017-03-29 12:47:11
【问题描述】:
我曾经有以下DataGrid:
<sdk:DataGrid x:Name="dataGrid" Grid.Row="0" Style="{StaticResource tableStyle}" ItemsSource="{Binding PagedView}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Path=EventID, StringFormat='#{0}'}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Width="Auto" Header="EventID"/>
<sdk:DataGridTextColumn Binding="{Binding EventDescription}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Width="Auto" Header="Description"/>
<sdk:DataGridTextColumn Binding="{Binding EventStatu.Description}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Width="Auto" Header="Status"/>
<sdk:DataGridTemplateColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" SortMemberPath="Detector.Track.TrackName" Width="Auto" Header="Track">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="3,0">
<TextBlock Text="{Binding Path=Detector.Track.TrackName}" />
<TextBlock Text="{Binding Path=Detector.DetectorID, StringFormat=' ({0})'}" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Binding="{Binding StartedOn.LocalDateTime, StringFormat={StaticResource DateFormat}}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Started" Width="Auto"/>
<sdk:DataGridTextColumn Binding="{Binding EndedOn.LocalDateTime, FallbackValue=N/A, StringFormat={StaticResource DateFormat}}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Stopped" Width="Auto"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
还有.cs
private void EventsLoaded(LoadOperation<Event> loadOperation)
{
events.Clear();
if(loadOperation.HasError)
{
loadOperation.MarkErrorAsHandled();
}
else
{
foreach (Event evnt in loadOperation.Entities)
{
events.Add(evnt);//For adding the whole event row
}
}
}
结果,这给了我以下行:
EventID Description Status Track Started Stopped
现在这一切都正确且有效。但是,我想添加一个额外的列,其中包含 Started 和 Stopped 之间的时间差。
为此,我添加了以下内容:
在我添加的设计器中:
<sdk:DataGridTextColumn Binding="{Binding Path=timediff}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Duration" Width="Auto"/>
在我添加的 .Cs 中:
string Difference = string.Empty;
TimeSpan duration = evnt.EndedOn.Value.Subtract(evnt.StartedOn);
if (duration.Days > 0)
{
Difference += string.Format("Event duration: {0} day(s) and {1} hour(s) \r\n",
duration.Days, duration.Hours);
}
else if (duration.Hours > 0)
{
Difference += string.Format("Event duration: {0} hour(s) and {1} minute(s) \r\n",
duration.Hours, duration.Minutes);
}
else
{
Difference += string.Format("Event duration: {0} minute(s) \r\n",
duration.Minutes);
}
List<TimeInfo> timeinfo = new List<TimeInfo>();
timeinfo.Add(new TimeInfo() { timediff = Difference });
和
public class TimeInfo
{
public string timediff { get; set; }
}
现在,当我再次运行该程序时,它会显示以下列:
EventID Description Status Track Started Stopped Duration
除了持续时间之外的所有内容都已填写。 当我在我的 .Cs 代码中添加以下内容时:
dataGrid.ItemsSource = timeinfo;
并运行应用程序,它只填写持续时间字段,其余为空。
是否有可能我可以在 1 个网格中显示两个 itemsource?
【问题讨论】: