动态添加一种在WPF中显示集合信息的新方式

本文关键字:集合 显示 信息 方式 WPF 添加 一种 动态 | 更新日期: 2023-09-27 17:58:15

我只是在学习WPF,所以请耐心等待。

我有一个视图模型,它包含一个可观察的Employee对象集合(为了简洁起见,这里非常简化),看起来像这样:

public class  Employee
{
  public string Name { get; set; }
  public string Title { get; set; }
}

在我的C#WPF应用程序中,我通过简单的数据绑定在视图中的选项卡控件中显示来自这个可观察集合的信息。到目前为止很简单。我的要求是,用户可以动态添加一个新选项卡,该选项卡只显示他们感兴趣的员工的信息,并且每次运行应用程序时,都会保存和重新加载员工数据的新视图。

所以,假设我的用户希望添加一个新的选项卡,只显示那些是软件工程师的员工。我需要给他们一个方法来选择他们的筛选条件,然后向选项卡控件添加一个新选项卡,该选项卡控件显示与所选筛选条件匹配的员工。然后,每次运行应用程序时,都应保存并重新创建新创建选项卡中员工信息的自定义视图。

我不需要完整的代码示例,尽管这确实很有帮助。我想要的是一些方法的建议,这样我就可以在谷歌上搜索信息了。我只是不确定哪种技术最适合解决这个问题。我想的是动态创建的数据模板或自定义CollectionViewSource,但我需要保存和重新加载这些信息,所以我应该保存动态创建的数据库模板,并在加载应用程序时使用它吗?

动态添加一种在WPF中显示集合信息的新方式

据我所知,每个选项卡都有一个过滤器和一个基于该过滤器加载的可观察集合。

如果是这种情况,一种可能的解决方案是定义一个视图模型来表示选项卡(EmployeesViewModel)。此视图模型将具有筛选器和可观察集合的属性,以及保存/修改可观察集合所用的任何其他方法。

public class EmployeesViewModel {
    public Filter Filter { get; set;}
    public ObservableCollection<Employee> Employees { get; set;}
    public Employee SelectedEmployee { get; set;}
    public RoutedCommand SaveSelectedEmployee { get; set;}
    …
}

一旦实现了这一点,就可以使类可序列化(通过实现ISerializable)。您应该只序列化筛选条件,而不是序列化集合的内容。

当您关闭应用程序或拆除选项卡查看器模块时,请遍历选项卡集合,获取关联的视图模型并序列化它们中的每一个。当您启动应用程序(或选项卡查看器模块)时,使用反序列化视图模型重新创建每个选项卡

您需要做的是创建一个TabControl模板(http://msdn.microsoft.com/en-us/library/ms754137(v=vs.85).aspx),然后在"最右边"选项卡上有一个按钮,可以添加新的选项卡,就像一个web浏览器。

如果你还是个模板新手,我建议你先练习模板化一个按钮,然后是一个文本框,再是一个扩展器,直到你变得很好。

模板是WPF工作的核心,所以花点时间练习并适应它

对于在启动时保存和加载信息等,我会查找"序列化",这基本上是将C#类转换为"流"的过程,然后可以从磁盘写入/读取。