如何将ItemsSource
的WPF绑定到私有属性?
<ComboBox x:Name="xxx" ItemsSource="{Binding Items, Mode=OneWay}"
DisplayMemberPath="ItemName"/>
public partial class ItemBuySellAddEdit : BasePage
{
private List<Item> Items { get; set; }
}
在表单加载时将填充项目列表。
答案 0 :(得分:20)
WPF中的DataBinding仅适用于公共属性。
MSDN:
您用作绑定的绑定源属性的属性必须 是你班级的公共财产。明确定义的接口 无法访问属性用于绑定目的,也不能保护, 没有基础的私有,内部或虚拟属性 实施
答案 1 :(得分:3)
如果你真的想要这样做,你必须提供一个自定义类型描述符,通过实现ICustomTypeDescriptor
- 通过常规公共属性的自定义PropertyDescriptor
提供额外的属性。您可以在类型本身上实现此接口,也可以通过TypeDescriptionProvider
实现;后者是首选,因为它适用于更多场景(诸如空列表之类的东西,而不需要提供具有ITypedList
实现的自定义列表)。这是很多的工作,除非在极端情况下,真的是不值得的。但它可以做到。
答案 2 :(得分:2)
这是不可能的,如果您愿意,可以使用internal
代替。
...并使用ObservableCollection<T>
并且不要忘记设置视图的DataContext。
答案 3 :(得分:1)
你需要一个相对源绑定,现在你的绑定是你的{Impor的ItemBuySellAddEdit
(FrameworkElement)Atleast的DataContext,因为你正在使用partial
。如果是ViewModel,请检查输出窗口,看看是否有任何绑定错误。
<ComboBox
x:Name="xxx"
ItemsSource="{Binding Items,
RelativeSource={RelativeSource AncestorType={x:Type ItemBuySellAddEdit}},
Mode=OneWay}"
DisplayMemberPath="ItemName"/>
但Stephan Bauer的答案仍然适用。
如果您希望该列表中的新项目自动显示,请考虑WaltiD的答案。