在多个选项卡项中重用数据网格
本文关键字:数据 数据网 网格 选项 | 更新日期: 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
属性。 将TabControl
的ItemsSource
绑定到Items
。
为包含应在"帐户"TabItem
上显示的DataGrid
的AccountsViewModel
定义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
的内容。
应该工作。