WPF设计器中的字段选择-没有下拉菜单?

WPF设计器中的字段选择-没有下拉菜单?,wpf,data-binding,.net-4.0,designer,Wpf,Data Binding,.net 4.0,Designer,来自WinForms的背景,我有点惊讶地看到,WPF中的ItemsControls之类的大多数(如果不是全部的话)与字段相关的属性都缺少用于选择字段的下拉列表 例如,使用组合框时,如果在设计器中将项资源绑定到ViewModel上的强类型集合,则DisplayMemberPath和ValueMemberPath属性要求我手动键入相应字段的名称。我以前的WinForms经验是,当绑定到强类型列表(特别是实现ITypedList的源代码)时,我会得到一个可用字段的下拉列表,这样就不可能过多地输入字段名

来自WinForms的背景,我有点惊讶地看到,WPF中的
ItemsControl
s之类的大多数(如果不是全部的话)与字段相关的属性都缺少用于选择字段的下拉列表

例如,使用组合框时,如果在设计器中将
项资源
绑定到ViewModel上的强类型集合,则
DisplayMemberPath
ValueMemberPath
属性要求我手动键入相应字段的名称。我以前的WinForms经验是,当绑定到强类型列表(特别是实现
ITypedList
的源代码)时,我会得到一个可用字段的下拉列表,这样就不可能过多地输入字段名

我是做错了什么,还是这还不是WPF中已经烘焙过的东西

编辑
我知道这个功能是由WinForms中的
ITypedList
接口提供的,但我的理解是,WPF中没有使用
System.ComponentModel
绑定方法(
PropertyDescriptor
s、
ITypedList
IBindingList
IListSource
)。数据网格之类的东西似乎在获取字段列表以创建列方面没有问题,所以我只是好奇这些用于表示属性名称的属性是否(和/或为什么)提供了相同级别的功能。

我认为这是WPF工具包中的一个错误。检查堆栈溢出问题


我认为它已经找到了问题的答案。

在代码中设置DataContext时,设计者很难确定要绑定的类型

当在其中分配DataContext时会更容易,尽管XAML编辑器中没有下拉菜单,但当您单击“属性”框中属性名称后面的小方框时,可以选择属性


我猜这是XAML编辑器缺少的功能。

在WPF中,像
DisplayMemberPath
ValueMemberPath
这样的属性不仅仅是属性,例如:

<ComboBox
    DisplayMemberPath="Addresses[0].Line1"
    ValueMemberPath="Address[0].Id"
    SelectedValue="{Binding Path=FavoriteAddressId}"
    ...
    />

如果设计器属性只允许您从属性列表中进行选择,那么您将错过一些非常有用的功能。但您是对的,除了能够键入列表外,还可以提供一个列表

WPF的绑定系统(相当动态)和团队对工具的愿景(需要一定的刚性)之间一直存在着权力斗争。这是其中一个可能属于空白的案例


编辑:
PropertyDescriptors
IBindingList
以及Windows窗体绑定的一些其他组件也在WPF中使用-例如,我的库依赖于PropertyDescriptors工作,并且是为WPF构建的。但是Silverlight不支持这些功能。

Hm…这似乎与特定控件中的错误有更多关系。我不是在使用WPF工具包,我实际上是在谈论WPF中的所有控件(包括MS和第三方,如DevExpress)。虽然这些控件的WinForms对应项总是为这些特殊字段公开可用属性的列表,但WPF设计器似乎没有。OP的问题(和我的问题)与数据绑定无关(在我的情况下,我使用设计时datacontext进行绑定,但这不是这里的问题)。该问题与组合框上的ValueMemberPath和DisplayMemberPath等字段有关。我认为这是由相同的问题引起的。我不确定您指的是什么问题;数据上下文是在Xaml中设置的,这就是为什么会列出绑定。这只是一个值在设计器中的下拉列表中不可用的问题,而不是数据对设计器不可用的问题。@Adam Robinson,据我所知,将DataContext设置为强类型源的唯一方法是将其指向StaticResource,因为这样设计器就可以正确推断类型。你能再给我举个例子吗?我可能不知道其他方法,我渴望学习。出于设计目的,我正在使用您链接到的设计时方法。这允许我在设计时指定一个强类型的数据上下文,然后在代码中设置实际的数据上下文。