【问题标题】:Re-Using Datagrid In Multiple TabItems在多个 TabItems 中重用 Datagrid
【发布时间】:2011-12-21 18:06:23
【问题描述】:

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

【问题讨论】:

    标签: c# wpf datagrid tabs tabcontrol


    【解决方案1】:

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

    这里的问题是单个DataGrid 不能同时属于两个TabItems。所以你必须首先在一个可以在后面的代码中访问的范围内声明一个DataGrid。接下来,当用户第一次添加新的tabitem 时,在tab control 中动态添加tab item 并将content 设置为等于DataGrid。当用户再次单击添加新选项卡项时,删除以前具有DataGrid 的选项卡项的content,然后在新的tab item 中添加datagrid。您还必须处理选项卡的selection change 事件,在该事件中,您必须从最后一个选定的项目中删除DataGrid 并放入新选定的项目。

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

    【讨论】:

      【解决方案2】:

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

      让您的主 ViewModel 定义一个 public ObservableCollection<object> Items 属性。将您的TabControlItemsSource 绑定到Items

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

      为包含DataGridTransactionsViewModel 定义一个DataTemplate,该DataGrid 应显示在每个事务TabItem

      【讨论】:

        【解决方案3】:

        Account Tab 上添加XAMLDataGrid,比如说AccountDataGrid

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

        创建将由其他TabItems 共享的DataGrid 对象,比如说SharedDataGrid

        之后你可以做这样的事情,例如:

        定义您的自定义TabItem

         public sealed class CustomTabItem : TabItem
         {
         }
        

        在该类中覆盖之后

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

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

        应该工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-20
          • 2014-09-09
          • 1970-01-01
          • 2018-08-31
          • 2020-10-17
          • 1970-01-01
          • 2011-02-18
          • 1970-01-01
          相关资源
          最近更新 更多