在多个选项卡项中重用数据网格

本文关键字:数据 数据网 网格 选项 | 更新日期: 2023-09-27 18:18:27

我有一个使用 TabControl 的 WPF 应用程序。 每个选项卡项将包含一个数据网格。 当应用程序启动时,默认情况下会加载一个显示"帐户"数据网格的 TabItem 。 此数据网格仅显示帐户信息。 然后,用户可以选择添加新的选项卡。 对于添加的每个选项卡,我需要加载相同的数据网格。 它与用于"帐户"选项卡项的数据网格不同。 新的数据网格将用于输入事务。 如何定义可在每个新添加的 TabItem 中使用的数据网格,但与第一个 TabItem 上的原始数据网格不同?

在多个选项卡项中重用数据网格

因此,

如果我理解正确,您想要的是第一个tabitem的默认DataGrid,然后是每个新tabitem相同的datagrid.

这里的问题是单个DataGrid不能同时成为两个TabItems的一部分。因此,您必须首先在可以在代码隐藏中访问的作用域中声明一个DataGrid。接下来,当用户添加新tabitem时,第一次在tab control中动态添加tab item,并将content设置为等于DataGrid。当用户再次单击"添加新选项卡项"时,删除以前DataGrid的选项卡项的content,然后在新tab item中添加datagrid。您还必须处理选项卡的selection change事件,在该事件中,您必须从上次选择的项目中删除DataGrid并放入新选择的项目。

我不确定您是否真的需要为不同的选项卡项使用相同的dataGrid,但是在实施此方法之前请考虑其他可能的解决方案

在这种情况下,我建议使用 MVVM 模式。

让主视图模型定义一个public ObservableCollection<object> Items属性。 将TabControlItemsSource绑定到Items

为包含应在"帐户"TabItem上显示的DataGridAccountsViewModel定义DataTemplate

TransactionsViewModel定义一个DataTemplate,其中包含应在每个事务TabItem上显示的DataGrid

Account Tab添加XAML DataGrid,假设 AccountDataGrid

对于其他类型,由于它们在运行时生成,因此最好从代码中管理它们。

创建DataGrid将由其他TabItems共享的对象,假设共享数据网格

在您可以执行以下操作之后,例如:

定义自定义TabItem

 public sealed class CustomTabItem : TabItem
 {
 }

并在该类中覆盖之后

 protected override void OnInitialized(EventArgs e)
 {
    //assign shared SharedDataGrid to the content of TabItem
 }

在该方法中,实际上将SharedDataGrid分配给刚刚创建和初始化的TabItem的内容。

应该工作。