动态创建Tab + DataGrid以绑定多个不同的类?

时间:2014-08-24 20:18:08

标签: c# wpf mvvm

我为这个糟糕的标题道歉,我不太清楚如何总结我想要做的事情。

我的情景: 我正在将现有的WinForms应用程序重构为WPF和MVVM。我目前正在开发一个模块,它为包含许多不同表格的数据库提供搜索功能,例如Contact,User,Case,Product等。在代码隐藏中,有些类为每个表提供一个Object。我为每个可搜索的表对象编写了包装类,只显示用户希望/需要在每种类型的Object的搜索结果中看到的属性,以便绑定到DataGrid。

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

enter image description here

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

我不知道如何从目前所处的位置前往上图所示的目标。感谢任何人提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解你的问题,但我认为它可能是datatemplateselector的候选者。

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

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

如果要在选项卡中显示结果,我会在viewmodel中显示每种结果类型的集合。所以你有一个Users集合和一个单独的Products集合。然后,您可以将各个数据网格绑定到每个模板。

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

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

很抱歉,如果这看起来有点意外转储,但就像我说的 - 不确定我是否完全得到了问题:)

而不是把大量的代码片段放进去,如果有什么听起来有用的话,那里有大量的样本只是google。