Существуют различные способы исправить: один, если привести к строке, другой - вызвать ToString для SelectedValue.
Поскольку вы заявили, что некоторые из других предложенных ответов не работают, вы уверены, что элемент в поле со списком на самом деле является строкой?
Например, это будет работать с предлагаемыми исправлениями:
<Window x:Class="ExerciseOne.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:extern="clr-namespace:System;assembly=mscorlib">
<Grid>
<ComboBox SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Items>
<extern:String>Hello</extern:String>
<extern:String>Floyd-Warshall</extern:String>
</ComboBox.Items>
</ComboBox>
</Grid>
</Window>
Но это не так:
<Window x:Class="ExerciseOne.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:extern="clr-namespace:System;assembly=mscorlib">
<Grid>
<ComboBox SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Items>
<ComboBoxItem>Hello</ComboBoxItem>
<ComboBoxItem>Floyd-Warshall</ComboBoxItem>
</ComboBox.Items>
</ComboBox>
</Grid>
</Window>
Вы можете быстро определить, так ли это, запустив следующий код в существующем обработчике событий:
MessageBox.Show(((ComboBox)sender).SelectedValue.GetType().ToString());