在多个TabItem中重用Datagrid

时间:2011-12-21 18:06:23

标签: c# wpf datagrid tabs tabcontrol

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

3 个答案:

答案 0 :(得分:0)

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

问题在于,单个DataGrid不能同时成为两个TabItems的一部分。所以你必须首先在一个范围内声明DataGrid,然后在后面的代码中访问它。接下来,当用户首次添加新tabitem时,在tab item中动态添加tab control,并将content设置为DataGrid。当用户再次点击添加新标签项时,请删除以前有content的{​​{1}}标签项,然后在新DataGrid中添加datagrid。您还必须处理tab item标签事件,在该事件中,您必须从上次选择的项目中删除selection change并放入新选择的项目。

我不确定你是否真的需要这个相同的dataGrid用于不同的标签项,但是在实现这种方法之前要考虑其他可能的解决方案

答案 1 :(得分:0)

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

让您的主ViewModel定义public ObservableCollection<object> Items属性。将TabControl的{​​{1}}绑定到ItemsSource

Items定义一个DataTemplate,其中包含应显示在帐户AccountsViewModel上的DataGrid

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

答案 2 :(得分:0)

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的内容。

应该工作。