The way WPF binding works, it tries to bind to a property of the object in the list. If one is not specified, then it will use the first property it finds (for strings this is the Length property). To get around this, I use LinQ and an anonymous type, something like this
List<string> mlw = new List<string>(){"qwe1","qwe2","qwe3","qwe4","qwe5"};
var values = from str in mlw select new { value = str };
dataGrid1.DataContext = values.ToList();
and this will show the actual string value
This is the xaml declaration
<DataGrid Name="dataGrid1" Grid.Row="4" ItemsSource="{Binding}" AutoGenerateColumns="True"/>
Hope this helps