使用WPF在表格中分组并显示一组事件
我经历了一些WPF的建议; 我有一个定义时间,事件类型和描述的对象列表,如下所示:
public class AnEvent
{
public EventType EventType { get; set; }
public DateTime TimeStamp { get; set; }
public string Description { get; set; }
}
我想显示这样的项目的集合:
-------------------------------------
| Time | Type1 | Type3 |
-------------------------------------
| 12:00 | Event1 | |
-------------------------------------
| 12:01 | Event2 | Event4 |
| | Event3 | |
-------------------------------------
| 12:05 | | Event5 |
-------------------------------------
在WPF中显示这些数据的最佳方式是什么?
我考虑过使用Grid,但我不知道如何去做
我还考虑过预处理事件列表,以便按时间生成事件集合,然后按照类型生成事件集合,然后使用多个ItemsControl来显示不同的级别。
我的其他选择是什么?
谢谢!
我建议你写一个简单的虚拟机
public class EventLogByTimeViewModel : ViewModelBase
{
public DateTime Time { get; set; }
public ObservableCollection<AnEvent> Type1Collection { get; set; }
public ObservableCollection<AnEvent> Type3Collection { get; set; }
}
并创建一个工厂,您将提供一个AnEvent列表,并输出一个虚拟机列表
public interface IEventLogByTimeVMFactory
{
IList<EventLogByTimeViewModel> GenerateVM(IList<AnEvent>);
}
您可以确实使用工厂实现中Linq扩展中的GroupBy
方法来实现更简单的过程。
然后在高级视图模型(您绑定到DataContext的模型)中,公开并实现EventLogByTimeViewModel的集合
public class MainViewModel : ViewModelBase
{
private IEventLogByTimeVMFactory _factory;
public MainViewModel()
{
EventLogs = new ObservableCollection<EventLogByTimeViewModel>();
_factory = new MyFactoryImplementation();
}
public ObservableCollection<EventLogByTimeViewModel> EventLogs { get; set; }
public void LoadData(IList<EventEventLogByTimeViewModel> eventLogs)
{
var vms = _factory.GenerateVM(eventLogs);
EventLogs.Clear();
foreache(vm in vms)
{
EventLogs.Add(vm);
}
}
}
您将调用LoadData方法的机制取决于您。
最后,在你的用户界面中,我鼓励你使用DataGrid
控件,将EventLogs
属性绑定到它的ItemsSource
并最终为Type1和Type3列实现DataTemplate
,这些列将显示ItemsControl
的EventType
集合。
上一篇: Grouping and displaying a collection of events in a table with WPF
下一篇: Select arbitrary text in a WPF datagrid row or cell and copy it