【问题标题】:Dynamically creating Tab+DataGrid for binding with multiple different classes?动态创建 Tab+DataGrid 以绑定多个不同的类?
【发布时间】:2014-08-24 20:18:08
【问题描述】:

我为这个蹩脚的标题道歉,我不太清楚如何总结我正在尝试做的事情。

我的场景: 我正在将现有的 WinForms 应用程序重构为 WPF 和 MVVM。我目前正在开发一个模块,该模块为由许多不同的表(如联系人、用户、案例、产品等)组成的数据库提供搜索功能。在代码隐藏中有为每个表提供对象的类。我为每个可搜索的表对象编写了包装类,这些类只公开用户希望/需要在搜索结果中为每种类型的对象看到的属性,以绑定到 DataGrid。

一旦这些搜索结果存在,它们就需要显示在选项卡控件和数据网格的组合中,如下所示:

由于某些用例,我需要能够为执行的每个搜索的结果创建单独的显示 Tab+DataGrid。对于根据需要显示/隐藏的每种搜索类型,我不能有一个选项卡。

我不知道如何从我目前的位置继续到上面描述的目标。感谢任何人都可以提供的任何帮助。

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    不确定我是否完全理解您的问题,但在我看来它可能是 datatemplateselector 的候选者。

    基本上,您使用绑定到结果集合的 ItemsControl,然后 - 使用 datatemplateselector - 您交换适当的模板以根据代码检查显示项目。

    这将使您可以在一个列表中显示所有结果。

    如果您想在选项卡中显示结果,我会在您的视图模型中显示每种结果类型的集合。所以你有一个用户集合和一个单独的产品集合。然后,您可以将单个数据网格绑定到每个模板。

    如果您想在没有结果时隐藏选项卡,请使用 expression.interactivity 命名空间添加数据触发器,以根据其各自的收集计数触发每个选项卡页的可见性。

    还有一件事,如果您想动态创建选项卡项目,即每次搜索一个选项卡 - 选项卡控件具有 ItemSource 属性。如果您将每个搜索结果分组到一个对象中并公开该对象的可观察集合,您可以将其绑定到您的选项卡控件并让它为每个搜索结果创建选项卡项。只需使该对象包含实际结果的集合,您就应该能够创建这里已经提到的 itemscontrol。

    很抱歉,这似乎有点令人费解,但就像我说的那样 - 不确定我是否完全明白了这个问题 :)

    然后将大量代码放入 sn-ps 中,如果听起来有帮助,那么只需 google 一下就可以找到大量示例。

    【讨论】:

    • 我会研究您提出的一些建议,但是,您对我的问题的一部分有误解。我不能只为每种类型的搜索设置一个选项卡,根据需要隐藏/显示。对于每组搜索结果,我都需要一个选项卡——在许多用例中,用户需要能够执行和查看多个相同类型的搜索的结果。我会尝试更新我的问题以使其更清楚。
    • 我已经编辑了一些我认为合适的提示。
    • 您能否将我链接到您使用 Tab 控件的 ItemSource 位描述的一个很好的示例?
    • tap-source.com/mvvm-tabcontrol - 这是一个很好的清晰示例,您应该希望由此能够扩展 itemtemplate 以满足您的要求。
    • 这正是我所需要的。谢谢!
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2017-10-14
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多