繁体   English   中英

在多个TabItem中重新使用Datagrid

[英]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属性。 TabControlItemsSource绑定到Items

AccountsViewModel定义一个DataTemplate ,该AccountsViewModel包含应显示在Accounts TabItem上的DataGrid

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

在“ Account TabXAML添加一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM