WPF将组合框绑定到列表字符串

本文关键字:列表 字符串 绑定 组合 WPF | 更新日期: 2023-09-27 18:04:00

我很难通过XAML将List类型的属性绑定到我的组合框。

public List<string> MyProperty  { get; set; }

下面的XAML绑定不起作用:

<ComboBox Name="cboDomainNames" ItemsSource="{Binding Path=MyProperty}"/> 

但是下面的赋值:

cboDomainNames.ItemsSource = MyProperty;

完美工作。我在这里错过了什么?

WPF将组合框绑定到列表字符串

回复我的评论来标记答案。

设置了My DataContext,但它是在InitializeComponent()之后设置的。我想这就是问题所在。然后我意识到,当我通过xaml绑定时,当视图加载时,绑定发生在空属性上。

当视图加载后准备好(即_present . onviewready())时,该属性被填充。因为它不是一个可观察集合,所以没有任何东西被添加到组合框中。从我的代码中指定它是有效的,因为那时数据存在于属性中。

假设您的窗口/页面中有一个名为FoosList<Foo>Foo具有Name的性质。现在在XAML中设置绑定,如下所示:

<ComboBox ItemsSource="{Binding Path=Foos}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding Path=Foo}"
/>

这是基于这个SO问题。阅读这篇文章(WPF数据绑定概述),作为WPF中数据绑定的良好基础。

如果您只指定路径,那么绑定将假定容器DataContext作为源。顺便说一下,有用的属性是在容器上定义的(例如window)。

你可以这样解决它(在xaml中):

ItemsSource="{Binding Path=MyProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"