多列组合框中的选定项为空

  • 本文关键字:组合 c# wpf combobox null
  • 更新时间 :
  • 英文 :


我正在WPF上写作。在其中,我使用MultiColumnComboBox来选择一些值。看起来像这样。

<ComboBox x:Name="OutputMatrNr" IsTextSearchEnabled="False" IsEditable="True" ItemsSource="{Binding DataSource}" IsDropDownOpen="False" StaysOpenOnEdit="True" KeyUp="OutputMatrNr_KeyUp" DropDownClosed="ComboBoxStudentOnDropDown" KeyDown="ComboBoxStudentOnKeyPress" SelectedItem="{Binding Path=students, Mode=TwoWay}" BorderThickness="2px" BorderBrush="black" Canvas.Left="2px" Canvas.Top="18px" Width="100px">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Margin="2" Text="{Binding MatrNr}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid x:Name="gd" TextElement.Foreground="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Margin="5" Grid.Column="0" Text="{Binding MatrNr}"/>
<TextBlock Margin="5" Grid.Column="1" Text="{Binding NachName}"/>
<TextBlock Margin="5" Grid.Column="2" Text="{Binding VorName}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>

这是背后的代码。

protected void ComboBoxStudentOnDropDown(object sender, EventArgs args)
{
if (((Student)OutputMatrNr.SelectedItem).Equals(null)){ // here sometimes the System.NullReferenceException occures
FillStudentFromComboBox(((Student)OutputMatrNr.SelectedItem).MatrNr.ToString()); // I never(!) get here
}
else
{
Console.WriteLine("else");
}
}
protected void ComboBoxStudentOnKeyPress(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
FillStudentFromComboBox(OutputMatrNr.Text); //this works every time
}
}

如果 MatrNr 写在 ComboBox 中,我会过滤其中写入的内容。如果您编写完整的 Nr 并按回车键,一切正常。 但是,如果您单击学生,我总是得到 Null 作为回报(以 else 情况结束(。此外,我还得到了一个System.NullReferenceException,它每隔一段时间就会发生一次,我无法完全重现该错误。 我错过了一些东西,但我无法弄清楚它是什么。

您的OutputMatrNr.SelectedItem可能为空。这就是你得到NullReferenceException的原因。所以 IF 条件应该像这样改变。

if (OutputMatrNr.SelectedItem != null && OutputMatrNr.SelectedItem is Student)
{                
FillStudentFromComboBox(((Student)OutputMatrNr.SelectedItem).MatrNr.ToString());
}
else
{
Console.WriteLine("else");
}

此外,根据您的代码,SelectedItem是类型Student.但是在 xaml 中,您将SelectedItem绑定到students.如果是学生,则需要相应地更改 xaml。

<ComboBox x:Name="OutputMatrNr" SelectedItem="{Binding Path=Student, Mode=TwoWay}"....>

相关内容

  • 没有找到相关文章

最新更新