<ListBox ItemsSource="{Binding Path=Commands}" DisplayMemberPath="Name"/>
DisplayMemberPath
不起作用,ListBox 显示 Commands
集合成员的默认 ToString
结果。是否可以调试它,例如,通过将一些信息打印到“输出”窗口?
Visual Studio 2010,WPF 应用程序项目。绑定(bind)成功,我看到了 Commands
集合的所有成员。但是显示不对。
附加信息。如果我将 Path=Commands
更改为不存在的 Path=Commands1
,我会在“输出”窗口中看到错误消息。但是DisplayMemberPath
中没有任何关于错误的信息。
最佳答案
我在 WPF 中遇到的调试绑定(bind)错误的更清晰/更清晰的方法之一通常是链接(但使用旧的、损坏的链接),目前可以在这里找到:http://www.zagstudio.com/blog/486#.UhyT8fNwbs0
具体来说,该方法使用 .Net 3.5 中引入的调试功能,使用附加属性 PresentationTraceSources.TraceLevel
并允许您指定特定的跟踪级别来调查您的绑定(bind)问题。
总结一下:
您添加以下命名空间:
<Window
<!-- Window Code -->
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
/>
然后在您的绑定(bind)表达式中,设置附加属性。在我的示例中,我使用了具有 Name
属性的 Cars
对象列表,并且错误地将 DisplayMemberPath
列为 Names
:
<ListBox ItemsSource="{Binding Path=Cars, diagnostics:PresentationTraceSources.TraceLevel=High}" DisplayMemberPath="Names" />
这会在“输出”窗口中产生以下消息(出现多次,每次失败绑定(bind)一次):
System.Windows.Data Error: 40 : BindingExpression path error: 'Names' property not found on 'object' ''Car' (HashCode=59988153)'. BindingExpression:Path=Names; DataItem='Car' (HashCode=59988153); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
整个链接值得一读,但这是我成功使用的特定技术的要点(以防链接失效)。
关于wpf - ListBox.DisplayMemberPath 未按预期工作。我该如何调试呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18463781/