wpf - ListBox.DisplayMemberPath 未按预期工作。我该如何调试呢?

标签 wpf debugging data-binding

    <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/

相关文章:

c++ - 如何在 QtCreator 的调试器中显示 std::multimap 和 std::multiset 的内容?

c# - 需要帮助识别 IIS 中的细微错误……? session ?别处..?

c# - 我如何从选定的 ListView 项目中获取名称?

java - 安卓数据绑定(bind) : Cannot resolve symbol

c# - 在 WPF 中查找字形的像素大小

wpf - 如何在 MVVM 中的一个 StackPanel 中动态设置 Extenders 内的 3 个 DataGrids 的高度?

.net - 椭圆绘图 WPF 动画

c# - 为什么在我打开然后关闭窗口上的菜单时会出现 InvalidCastException?

python - 如何在生产中调试ajax View ?

java - 另一个注释处理器使用的生成类