动态添加新方法以在WPF中显示集合信息

时间:2013-02-08 13:14:15

标签: c# wpf

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

我有一个带有可观察集合的viewmodel(为简洁起见,这里简化)Employee对象看起来像这样:

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

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

因此,假设我的用户想要添加一个新选项卡,只显示那些属于软件工程师的员工。我需要为他们提供一种方法来选择他们的过滤条件,然后在选项卡控件中添加一个新选项卡,以显示符合所选过滤条件的员工。然后,每次运行应用程序时,都应保存并重新创建新创建的选项卡中的员工信息的自定义视图。

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

2 个答案:

答案 0 :(得分:1)

根据我的理解,您的标签每个都会有一个过滤器和一个基于此过滤器加载的可观察集合。

如果是这种情况,一种可能的解决方案是定义一个视图模型来表示选项卡(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 )。您应该只序列化过滤条件,而不是集合的内容。

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

答案 1 :(得分:0)

你需要做的是创建一个TabControl模板(http://msdn.microsoft.com/en-us/library/ms754137(v=vs.85).aspx),然后在“最右边”选项卡上有一个按钮,让你添加新标签,一个网页浏览器。

如果你还不熟悉模板,我会建议练习button,然后是textbox,然后是扩展器,直到你变好为止。

模板是WPF工作方式的核心,因此请花点时间练习并熟悉它。

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