【发布时间】:2020-12-14 10:16:02
【问题描述】:
问题:在DataGrid中Combobox的SelectionChanged事件内,ComboboxItem始终为空。我可能缺少什么以及我们如何解决这个问题?请注意(如图 1 所示)如果您能够从组合框中选择一个项目,则表示该组合框已经加载。因此在加载组合框后会调用 SelectionChanged 事件。
Employee.cs:
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public string StateName { get; set; }
}
State.cs:
public class State
{
public string StateName { get; set; }
public string StateCode { get; set; }
}
StateList.cs:
public class StateList : List<State>
{
public StateList()
{
Add(new State { StateName = "Iowa", StateCode = "IA" });
Add(new State { StateName = "Nebraska", StateCode = "NE" });
Add(new State { StateName = "Ohio", StateCode = "OH" });
Add(new State { StateName = "Virginia", StateCode = "VA" });
}
}
Combobox SelectionChanged 事件 [总是将 cmbItem 返回为 null]:
private void cmbState_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
StateList states = new StateList();
string st = "";
ComboBoxItem cmbItem = ((sender as ComboBox).SelectedItem as ComboBoxItem);
if(cmbItem != null)
st = " You selected " + cmbItem.Content.ToString() + ".";
}
更改选择的快照:
ComboboxItem 显示为空:
MainWindow.xaml:
<Window x:Class="WPF_DataGridCombobox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
.......
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<local:StateList x:Key="ListOfStates"/>
</Window.Resources>
<Grid>
<DataGrid x:Name="dgEmplyees" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Update">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btnUpdate" Click="btnUpdate_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTemplateColumn Header="State Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding StateName}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="cmbState" ItemsSource="{StaticResource ListOfStates}" DisplayMemberPath="StateName" SelectedValuePath="StateName" SelectedValue="{Binding StateName}" SelectionChanged="cmbState_SelectionChanged" IsEditable="False" IsReadOnly="True" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
【问题讨论】:
-
(sender as ComboBox).SelectedItem as ComboBoxItem为空,因为 SelectedItem 不是 ComboBoxItem。它是一个状态对象。 -
@Clemens 我以微软团队的this 官方文档为例。我误解了文件吗?
标签: c# wpf combobox datagrid datagridcomboboxcolumn