我刚刚被 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>
正如预期的那样,列表框的输出是 3 行“MyProject.DumbClass”。
但是,如果我设置DisplayMemberPath="MyStupid"
(或创建一个 ItemTemplate,将 'MyStupid' 直接绑定到模板中的 TextBlock),我会得到 3 个空行,而我期望它会说MyProject.IsStupid
. 为什么数据绑定引擎无法调用默认ToString()
实现并显示类名。接口类型属性是否有解决方法?至少,有没有抛出绑定错误的原因?