[英]Re-Using Datagrid In Multiple TabItems
我有一个使用TabControl的WPF应用程序。 每个TabItem将包含一个数据网格。 当应用程序启动时,默认情况下会加载一个TabItem,其中显示一个“ Accounts”数据网格。 该数据网格仅显示帐户信息。 然后,用户可以选择添加新的选项卡。 对于添加的每个选项卡,我需要加载相同的数据网格。 它与用于Accounts TabItem的数据网格不同。 新的数据网格将用于输入交易。 如何定义可在每个新添加的TabItem中使用但与第一个TabItem上的原始datagrid不同的datagrid?
因此,如果我正确理解,您想要的是第一个tabitem
的默认DataGrid
,然后对于每个新tabitem
相同datagrid
。
这里的问题是单个DataGrid
不能同时属于两个TabItems
。 因此,您首先必须在可以在后面的代码中访问它的范围内声明一个DataGrid
。 接下来,当用户第一次添加新的tabitem
时,请在tab control
动态添加tab item
,并将content
设置为等于DataGrid
。 当用户再次单击添加新选项卡项时,请删除先前具有DataGrid
的选项卡项的content
,然后在新tab item
添加datagrid
。 您还必须处理选项卡的selection change
事件,并且在该事件内,您必须从最后选择的项目中删除DataGrid
并将其放置在新选择的项目中。
我不确定您是否确实需要为不同的选项卡项目使用相同的dataGrid,但是在实现此方法之前先考虑一下其他可能的解决方案
在这种情况下,我建议使用MVVM模式。
让您的主要ViewModel定义一个public ObservableCollection<object> Items
属性。 将TabControl
的ItemsSource
绑定到Items
。
为AccountsViewModel
定义一个DataTemplate
,该AccountsViewModel
包含应显示在Accounts TabItem
上的DataGrid
。
为TransactionsViewModel
定义一个DataTemplate
,其中包含应该在每个 Transactions TabItem
上显示的DataGrid
。
在“ Account Tab
在XAML
添加一个DataGrid
,比如说AccountDataGrid
对于其他类型,由于它们是在运行时生成的,因此最好通过代码进行管理。
创建DataGrid
,将其他共享对象TabItems
,让我们说SharedDataGrid
在您可以执行以下操作之后,例如:
定义您的自定义TabItem
类
public sealed class CustomTabItem : TabItem
{
}
然后在该类中重写
protected override void OnInitialized(EventArgs e)
{
//assign shared SharedDataGrid to the content of TabItem
}
在该方法中,实际上将SharedDataGrid分配给刚创建和初始化的TabItem
。
应该工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.