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