<ListBox ItemsSource="{Binding Path=Commands}" DisplayMemberPath="Name"/>
DisplayMemberPath
不起作用,ListBox显示ToString
集合成员的默认Commands
结果。是否可以调试它,例如,通过将一些信息打印到输出窗口?
Visual Studio 2010,WPF应用程序项目。绑定成功,我看到Commands
集合的所有成员。但显示是错误的。
其他信息。如果我将Path=Commands
更改为不存在的Path=Commands1
,我会在“输出”窗口中看到错误消息。但DisplayMemberPath
中没有关于错误的任何信息。
答案 0 :(得分:1)
我在调试WPF中的绑定错误时遇到的一种更清晰/更清晰的方法通常是链接的(但使用较旧的,断开的链接),目前可在此处找到:http://www.zagstudio.com/blog/486#.UhyT8fNwbs0
具体而言,使用附加属性PresentationTraceSources.TraceLevel
使用.Net 3.5中引入的调试功能的方法,并允许您指定特定的跟踪级别来调查绑定问题。
总结这里:
添加以下命名空间:
<Window
<!-- Window Code -->
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
/>
在绑定表达式中,设置附加属性。在我的示例中,我使用的Cars
对象列表具有Name
属性,并且错误地将DisplayMemberPath
列为Names
:
<ListBox ItemsSource="{Binding Path=Cars, diagnostics:PresentationTraceSources.TraceLevel=High}" DisplayMemberPath="Names" />
这会在“输出”窗口中显示以下消息(多次出现,每个失败的绑定一次):
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')
整个链接值得一读,但这是我成功使用的特定技术的要点(如果链接死亡)。
答案 1 :(得分:0)
DisplayMemberPath
工作......你确定你正确使用它吗?您可以在MSDN的ItemsControl.DisplayMemberPath Property页面上找到它的示例。要使您的示例代码生效,您需要在Name
对象的数据类型上拥有公共Commands
属性。
如果失败,WPF错误通常会输出到Visual Studio Output窗口。如果您没有看到任何错误,请检查您是否正确设置了选项:
转到工具&gt;选项&gt;调试选项卡&gt; <输出窗口> WPF跟踪设置
您应该至少将其中一个选项(如数据绑定)设置为Warning,Error,All,Critical或Verbose以接收错误信息。
答案 2 :(得分:0)
如果你想使用Property&#34; Name&#34;您的&#34;命令&#34;项目,请使用以下
<ListBox ItemsSource="{Binding Path=Commands}" SelectedItem="{Binding SelectedCommandsItem, Mode=TwoWay}" DisplayMemberPath="Name"/>
其中SelectedCommandsItem
是模型的一个属性,它严格定义集合项的类型