Binding to interface typed properties <p>I just got bit by yet another binding oddity in WPF. Consider the following class and its <code>IStupid</code> typed property called <code>MyStupid</code>:</p> <pre><code>public struct DumbClass { public IStupid MyStupid { get { return new IsStupid(); } } } public interface IStupid{} public class IsStupid : IStupid{} </code></pre> <p>Now consider the following binding to a <code>ListBox</code>:</p> <pre><code>var items = new List&lt;DumbClass&gt;(new []{new DumbClass(), new DumbClass(), new DumbClass()}); OptListBox.ItemsSource = items; </code></pre> <p>There is nothing special about the xaml:</p> <pre><code>&lt;ListBox Name="OptOccurances" Height="238" HorizontalAlignment="Left" Margin="130,34,0,0" VerticalAlignment="Top" Width="229" &gt; &lt;/ListBox&gt; </code></pre> <p>As expected, the output of the listbox is 3 rows of "MyProject.DumbClass".</p> <p>However if I set <code>DisplayMemberPath="MyStupid"</code> (or create an ItemTemplate, binding 'MyStupid' directly to a TextBlock in the template), I get 3 empty rows instead, when I expected it to say <code>MyProject.IsStupid</code>. Why is the databinding engine unable to call the default <code>ToString()</code> implementation and display the class name. Is there a workaround for a interface typed property? At the very least, is there a reason why no binding error is thrown?</p>