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;
完美工作。我在这里错过了什么?
回复我的评论来标记答案。
设置了My DataContext,但它是在InitializeComponent()之后设置的。我想这就是问题所在。然后我意识到,当我通过xaml绑定时,当视图加载时,绑定发生在空属性上。
当视图加载后准备好(即_present . onviewready())时,该属性被填充。因为它不是一个可观察集合,所以没有任何东西被添加到组合框中。从我的代码中指定它是有效的,因为那时数据存在于属性中。
假设您的窗口/页面中有一个名为Foos
的List<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}}}"