在多个 TabItem 中重用 Datagrid

发布于 2024-12-22 17:23:44 字数 238 浏览 0 评论 0原文

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

I have a WPF application that uses a TabControl. Each TabItem will contain a datagrid. When the application starts up, there is one TabItem that loads by default that displays an "Accounts" datagrid. This datagrid displays only account information. The user can then choose to add new Tabs. For each tab that is added, I need the same datagrid to be loaded. It is NOT the same datagrid that is used for the Accounts TabItem. The new datagrid will be used to enter transactions. How can I define a datagrid that I can use in each newly added TabItem, but is different than the original datagrid on the first TabItem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凯凯我们等你回来 2024-12-29 17:23:44

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

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

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

So if I understand correctly what you want is a default DataGrid for the first tabitem and then for each new tabitem same datagrid.

Problem here is that a single DataGrid cannot be part of Two TabItems at the same time. So what you would have to do it first declare a DataGrid in a scope where it can be accessed in the code behind. Next, when user adds a new tabitem, first time, add a tab item dynamically in the tab control and set content equal to DataGrid. When user clicks the add new tab item again, remove the content of tab item which previously had DataGrid and then Add datagrid in the new tab item. You will also have to handle the selection change event of tabs and inside that event you will have to remove DataGrid from last selected item and put in the newly selected item.

I am not sure you really need this same dataGrid for different tab items thing or not but think before implementing this approach about other possible solutions

瀞厅☆埖开 2024-12-29 17:23:44

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

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

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

TransactionsViewModel 定义一个 DataTemplate,其中包含应显示在每个事务 TabItem< 上的 DataGrid /代码>。

In this case, I'd recommend using the MVVM pattern.

Have your main ViewModel define an public ObservableCollection<object> Items property. Bind your TabControl's ItemsSource to the Items.

Define a DataTemplate for an AccountsViewModel which contains the DataGrid which should be displayed on the Accounts TabItem.

Define a DataTemplate for a TransactionsViewModel which contains the DataGrid which should be displayed on each Transactions TabItem.

梦途 2024-12-29 17:23:44

Account Tab 中添加 XAML 一个 DataGrid,例如 AccountDataGrid

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

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

在您可以执行类似的操作后,例如:

定义您的自定义 < code>TabItem 类

 public sealed class CustomTabItem : TabItem
 {
 }

以及在该类内重写之后

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

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

应该可以工作。

On the Account Tab add in XAML a DataGrid, let's say AccountDataGrid

For other types, as they generated at runtime, it's better to manage them from the code.

Create DataGrid object that will be shared by other TabItems, let's say SharedDataGrid

After you can do something like this, for example:

Define your custom TabItem class

 public sealed class CustomTabItem : TabItem
 {
 }

and after override inside that class

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

In that method actually assign SharedDataGrid to the content of the just created and initialized TabItem.

Should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文