私は、WPF のさらに別の拘束力のある奇妙な点に少し触れました。次のクラスと、そのIStupid
型付きプロパティを考えてみましょうMyStupid
。
public struct DumbClass
{
public IStupid MyStupid { get { return new IsStupid(); } }
}
public interface IStupid{}
public class IsStupid : IStupid{}
次に、 a への次のバインディングを考えますListBox
。
var items = new List<DumbClass>(new []{new DumbClass(), new DumbClass(), new DumbClass()});
OptListBox.ItemsSource = items;
xaml について特別なことは何もありません。
<ListBox Name="OptOccurances" Height="238" HorizontalAlignment="Left" Margin="130,34,0,0" VerticalAlignment="Top" Width="229" >
</ListBox>
予想通り、リストボックスの出力は「MyProject.DumbClass」の 3 行です。
ただし、設定DisplayMemberPath="MyStupid"
(または ItemTemplate を作成し、テンプレートの TextBlock に「MyStupid」を直接バインド) すると、代わりに 3 つの空の行が表示されますMyProject.IsStupid
。ToString()
データバインディング エンジンがデフォルトの実装を呼び出してクラス名を表示できないのはなぜですか。インターフェイスの型付きプロパティの回避策はありますか? 少なくとも、バインディング エラーがスローされない理由はありますか?