【问题标题】:Field Selection in WPF Designer - No Dropdown?WPF 设计器中的字段选择 - 没有下拉菜单?
【发布时间】:2011-06-03 03:38:56
【问题描述】:

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

例如,当使用ComboBox 时,如果我在设计器中将ItemsSource 绑定到我的ViewModel 上的强类型集合,DisplayMemberPathValueMemberPath 属性要求我输入名称手动输入相应的字段。我以前的 WinForms 经验是,当绑定到强类型列表(特别是实现 ITypedList 的源)时,我会得到一个可用字段的下拉列表,这样就不会对字段名称进行粗略的处理。

我在这里做错了什么,还是这只是 WPF 中没有的东西?

编辑

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

【问题讨论】:

    标签: wpf data-binding .net-4.0 designer


    【解决方案1】:

    在 WPF 中,DisplayMemberPathValueMemberPath 等属性不仅仅是属性 - 一个示例可能是:

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

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

    在 WPF 的绑定系统(非常动态)和团队对工具的愿景(需要一定的刚性)之间一直存在权力斗争。这是可能落入差距的案例之一。

    编辑: PropertyDescriptorsIBindingList 和 Windows 窗体绑定的其他一些组件也在 WPF 中使用 - 例如,我的 MicroModels 库依赖于 PropertyDescriptors 工作,并且是构建的对于 WPF。然而,Silverlight 并不支持其中的许多。

    【讨论】:

      【解决方案2】:

      我认为这是 WPF 工具包中的一个错误。检查堆栈溢出问题ValueMemberPath Binding in AutoCompleteBox WPF only returns top result in last name search?

      我认为它可以解决问题。

      【讨论】:

      • 嗯...这看起来更多地与特定控件中的错误有关。我没有使用 WPF 工具包,我说的是 WPF 中的 all 控件(包括 MS 和第三方,如 DevExpress)。虽然这些控件的 WinForms 对应项总是会公开这些特殊字段的可用属性列表,但 WPF 设计器似乎没有。
      【解决方案3】:

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

      XAML 中分配 DataContext 时要容易得多,虽然 XAML 编辑器中没有下拉菜单,但当您在属性框中单击属性名称后面的小方块时,您可以选择属性。

      In addition you can even use a design-time datacontext to add design-time types and data (beta2 related post but still valid)

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

      【讨论】:

      • OP 的问题(和我的问题)与数据绑定无关(在我的情况下,我使用设计时数据上下文进行绑定,但这不是这里的问题)。该问题与组合框之类的 ValueMemberPath 和 DisplayMemberPath 等字段有关。
      • 我认为是同一个问题造成的。
      • 我不确定你指的是什么问题;数据上下文在 Xaml 中设置,这就是列出绑定的原因。这只是设计器的下拉列表中的值不可用的问题,而不是设计器 无法轻松获得数据。
      • @Adam Robinson,据我所知,将 DataContext 设置为强类型源的唯一方法是将其指向 StaticResource,因为这样设计人员可以正确推断类型。你能再给我一个例子吗?我可能对其他方法一无所知,但我渴望学习。
      • 出于设计目的,我使用的是您链接到的设计时方法。这允许我在设计时指定一个强类型的数据上下文,然后在代码中设置实际的数据上下文。
      猜你喜欢
      • 2018-01-19
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多