C# 动态创建选项卡+;用于绑定多个不同类的DataGrid?

C# 动态创建选项卡+;用于绑定多个不同类的DataGrid?,c#,wpf,mvvm,C#,Wpf,Mvvm,我为这个糟糕的标题道歉,我不太确定如何总结我要做的事情 我的设想: 我正在将现有的WinForms应用程序重构为WPF和MVVM。我目前正在开发一个模块,该模块为数据库提供搜索功能,该数据库由许多不同的表组成,如Contact、User、Case、Product等。在代码隐藏中,有一些类为每个表提供一个对象。我已经为每个可搜索表对象编写了包装器类,它们只公开了用户希望/需要在每种类型对象的搜索结果中看到的属性,以便绑定到DataGrid 一旦这些搜索结果存在,它们需要以选项卡控件和数据网格的组合

我为这个糟糕的标题道歉,我不太确定如何总结我要做的事情

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

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

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


我不知道如何从我目前的位置出发,实现上面所描述的目标。感谢任何人提供的帮助。

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

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

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

如果希望在选项卡中显示结果,我将在viewmodel中显示每个结果类型的集合。因此,您有一个用户集合和一个单独的产品集合。然后可以将各个数据网格绑定到每个模板

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

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

很抱歉,如果这看起来有点令人沮丧,但正如我所说,我不确定我是否完全明白这个问题:)


与其扔进一堆代码片段,不如在谷歌上搜索一下,如果有什么听起来有用的话。

我会研究一下你的一些建议,不过,我的问题有一部分你误解了。我不能根据需要为每种类型的搜索隐藏/显示一个选项卡。我需要为每一组搜索结果设置一个单独的选项卡-有许多用例,在这些用例中,用户需要能够执行和查看多个相同类型搜索的结果。我将尝试更新我的问题以使其更清楚。我已经编辑了一些我认为合适的提示。您能将我链接到一个您使用Tab控件的ItemSource位描述的示例吗?-这是一个很好的清晰的例子,您应该能够从中扩展itemtemplate以满足您的需求。这正是我所需要的。谢谢