0

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

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

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

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

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

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

4

2 回答 2

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)。您应该只序列化过滤条件,而不是集合的内容。

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

于 2013-02-08T13:53:41.897 回答
0

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

如果您还是模板新手,我建议您练习模板button,然后是textbox,然后是扩展器,直到您熟练为止。

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

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

于 2013-02-08T13:39:10.977 回答