2
    <ListBox ItemsSource="{Binding Path=Commands}" DisplayMemberPath="Name"/>

DisplayMemberPath不起作用,ListBox 显示集合成员ToString的默认结果。Commands是否可以调试这个,例如,通过将一些信息打印到输出窗口?

Visual Studio 2010,WPF 应用程序项目。绑定成功,我看到了Commands集合的所有成员。但是显示是错误的。

附加信息。如果我更改Path=Commands为 non-existing Path=Commands1,我会在“输出”窗口中看到错误消息。但是没有任何关于错误的信息DisplayMemberPath

4

3 回答 3

1

我在调试 WPF 中的绑定错误时遇到的一种更清晰/更清晰的方法通常是链接的(但使用的是旧的、损坏的链接),目前可以在这里找到:http ://www.zagstudio.com/blog/486 #.UhyT8fNwbs0

具体来说,使用 .Net 3.5 中引入的调试功能的方法,使用附加属性PresentationTraceSources.TraceLevel并允许您指定特定的跟踪级别来调查您的绑定问题。

在这里总结一下:

添加以下命名空间:

<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')

整个链接值得一读,但这是我成功使用的特定技术的要点(以防链接失效)。

于 2013-08-27T12:08:49.607 回答
0

DisplayMemberPath does work... are you sure that you're using it correctly? You can find an example of it on the ItemsControl.DisplayMemberPath Property page at MSDN. For your example code to work, you would need to have a public Name property on the data type in the Commands object.

Failing that, WPF errors generally get output into the Visual Studio Output window. If you do not see any errors there, check that you have the options set correctly:

Go to Tools > Options > Debugging tab > Output Window > WPF Trace Settings

You should have at least one of these options (like Data Binding) set to either Warning, Error, All, Critical or Verbose to receive error information.

于 2013-08-27T11:16:34.590 回答
0

如果您想使用“命令”项的属性“名称”,请使用以下内容

<ListBox ItemsSource="{Binding Path=Commands}" SelectedItem="{Binding SelectedCommandsItem, Mode=TwoWay}" DisplayMemberPath="Name"/>

模型的属性在哪里SelectedCommandsItem严格定义集合项的类型

于 2016-09-26T10:05:06.120 回答