【发布时间】:2020-11-28 23:23:58
【问题描述】:
WPF 表单具有带有三个 TabItem 的 TabControl。每个 TabItem 都包含 DataGrid。如果选择了 TabItem,我想填充 DataGrid。
C#
private void Window_Loaded(object sender, RoutedEventArgs e)
{
SetA_DG();
}
public void SetA_DG()
{
var sourcea UIAdapter.GetSourceA();
DataGrid_A.ItemsSource = sourcea;
}
public void SetB_DG()
{
var sourceb UIAdapter.GetSourceB();
DataGrid_B.ItemsSource = sourceb;
}
public void SetC_DG()
{
var sourcec UIAdapter.GetSourceC();
DataGrid_C.ItemsSource = sourcec;
}
private void ABC_TC_SelectionChenged(object sender, SelectionChangedEventArgs e)
//{
//var sTabItem = ABC_TC.SelectedItem as TabItem;
//switch (sTabItem.Name)
//{
//case "A_TI":
//SetA_DG();
//break;
//case "B_TI":
//SetB_DG();
//break;
//case "C_TI":
//SetC_DG();
//break;
//}
{
var employees = GetEmployees();
TabControl tabControl = (TabControl)sender;
var selectedIndex = tabControl.SelectedIndex;
TabItem tabItem = (TabItem)tabControl.SelectedItem;
Grid grid = (Grid)tabItem.Content;
var dataGrid = grid.GetChildOfType<DataGrid>();
dataGrid.ItemsSource = employees;
}
}
当我运行应用程序时,我收到错误消息: System.NullReferenceException: '对象引用未设置为对象的实例。' dataGrid 为空。 在线执行停止:dataGrid.ItemsSource = employees;
XAML
` <TabControl x:Name="ABC_TC" TabStripPlacement="Top" BorderThickness="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" SelectionChanged="ABC_TC_SelectionChanged">
<TabItem x:Name="A_TI" IsSelected="True" Header="AAA" >
<DataGrid Name="A_DG" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="250" SortMemberPath="Name" IsReadOnly="True"/>
<DataGridTextColumn Header="Description" Binding="{Binding Path=Description}" Width="250" SortMemberPath="Description" IsReadOnly="True"/>
<DataGridTextColumn Header="Active" Binding="{Binding Path=IsActive}" Width="50" SortMemberPath="IsActive" IsReadOnly="True"/>
<DataGridTextColumn Header="Created On" Binding="{Binding Path=CreatedOn, StringFormat='{}{0:MM/dd/yyyy}'}" Width="110" SortMemberPath="CreatedOn" IsReadOnly="True"/>
<DataGridTextColumn Header="Created By" Binding="{Binding Path=CreatedBy}" Width="100" SortMemberPath="CreatedBy" IsReadOnly="True"/>
<DataGridTextColumn Header="Updated On" Binding="{Binding Path=UpdatedOn, StringFormat='{}{0:MM/dd/yyyy}'}" Width="110" SortMemberPath="UpdatedOn" IsReadOnly="True"/>
<DataGridTextColumn Header="Updated By" Binding="{Binding Path=UpdatedBy}" Width="100" SortMemberPath="UpdatedBy" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem x:Name="B_TI" IsSelected="True" Header="BBB" >
<DataGrid Name="B_DG" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="250" SortMemberPath="Name" IsReadOnly="True"/>
<DataGridTextColumn Header="Email" Binding="{Binding Path=Email}" Width="250" SortMemberPath="Email" IsReadOnly="True"/>
<DataGridTextColumn Header="Created On" Binding="{Binding Path=CreatedOn, StringFormat='{}{0:MM/dd/yyyy}'}" Width="110" SortMemberPath="CreatedOn" IsReadOnly="True"/>
<DataGridTextColumn Header="Created By" Binding="{Binding Path=CreatedBy}" Width="100" SortMemberPath="CreatedBy" IsReadOnly="True"/>
<DataGridTextColumn Header="Updated On" Binding="{Binding Path=UpdatedOn, StringFormat='{}{0:MM/dd/yyyy}'}" Width="110" SortMemberPath="UpdatedOn" IsReadOnly="True"/>
<DataGridTextColumn Header="Updated By" Binding="{Binding Path=UpdatedBy}" Width="100" SortMemberPath="UpdatedBy" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem x:Name="C_TI" IsSelected="True" Header="CCC" >
<DataGrid Name="C_DG" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="250" SortMemberPath="Name" IsReadOnly="True"/>
<DataGridTextColumn Header="IsActive" Binding="{Binding Path=IsActive}" Width="50" SortMemberPath="Isactive" IsReadOnly="True"/>
<DataGridTextColumn Header="Created On" Binding="{Binding Path=CreatedOn, StringFormat='{}{0:MM/dd/yyyy}'}" Width="110" SortMemberPath="CreatedOn" IsReadOnly="True"/>
<DataGridTextColumn Header="Created By" Binding="{Binding Path=CreatedBy}" Width="100" SortMemberPath="CreatedBy" IsReadOnly="True"/>
<DataGridTextColumn Header="Updated On" Binding="{Binding Path=UpdatedOn, StringFormat='{}{0:MM/dd/yyyy}'}" Width="110" SortMemberPath="UpdatedOn" IsReadOnly="True"/>
<DataGridTextColumn Header="Updated By" Binding="{Binding Path=UpdatedBy}" Width="100" SortMemberPath="UpdatedBy" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
`
如何解决问题?
谢谢。
【问题讨论】:
-
当我从你建议的链接中添加 GetChildOfType 方法时,我收到了错误消息: