WPF 数据绑定组合框到列表<string>

Posted

技术标签:

【中文标题】WPF 数据绑定组合框到列表<string>【英文标题】:WPF Databinding combobox to a list<string> 【发布时间】:2011-10-14 19:42:59 【问题描述】:

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

public List<string> MyProperty   get; set; 

以下 XAML 绑定不起作用:

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

但是下面的赋值:

cboDomainNames.ItemsSource = MyProperty;

完美运行。我在这里缺少什么?

【问题讨论】:

ComboBox 的 DataContext 是否正确? 是的,该属性在视图中(我的应用程序是 MVP-PRISM-WPF)并且我已设置 DataContext= this;还有更多 ItemSource 的代码分配工作!通过 xaml 没有! 我想我成功了!我的 DataContext 已设置!但是它是在 InitializeComponent() 之后设置的,认为这可能是问题。然后就通过xaml实现了am绑定!当视图在加载后准备就绪时(即在 _presenter.OnViewReady() 上),该属性将被填充!因为它不是一个可观察的集合,所以没有任何东西被添加到组合框中!从我的代码后面指定它,因为当时数据存在于属性中! @ioWint:请发布一个答案,解释问题所在以及如何修复它,并通过答案左侧的复选标记接受。 @HB 我在评论中发布了答案!我不知道如何将其标记为答案! 【参考方案1】:

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

我的 DataContext 已设置,但它是在 InitializeComponent() 之后设置的。我认为这可能是问题所在。然后我意识到,当我通过 xaml 进行绑定时,当视图加载时,绑定发生在为空的属性上。

当视图在加载后准备就绪时(即在 _presenter.OnViewReady() 上),该属性会被填充。由于它不是可观察的集合,因此不会将任何内容添加到组合框中。从我的代码中指定它是有效的,因为当时数据存在于属性中。

【讨论】:

【参考方案2】:

假设您的窗口/页面中有一个名为FoosList&lt;Foo&gt;Foo 有一个属性 Name。现在您在 XAML 中设置绑定,如下所示:

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

这是基于this SO question。 Read this(WPF 数据绑定概述)作为 WPF 中数据绑定的良好基础。

【讨论】:

是的,但目前我对 List 的属性感兴趣!如果 ItemsSource 分配背后的代码没有工作,那么我不会更困惑!会与一个自定义实体一起认为我总是需要 DisplayMemberPath! 不是绑定到列表的解决方案【参考方案3】:

如果您只指定路径,则绑定假定容器 DataContext 作为源。顺便说一句,有用的属性是在容器上定义的(例如窗口)。

您可以按如下方式解决它(在 xaml 中):

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

【讨论】:

我试过这个马里奥!但运气不好!我无法让它填充。 view 是从 baseView 继承的,所以我放的是我的 baseView 而不是 window!它仍然没有被绑定!

以上是关于WPF 数据绑定组合框到列表<string>的主要内容,如果未能解决你的问题,请参考以下文章

c#wpf将列表绑定到Listview - listview行为空[关闭]

WPF 组合框和数据绑定到其他类

将 Dictionary<T> 绑定到 WPF 列表框

WPF中的数据绑定单选按钮列表

WPF将comboBox绑定到List

WPF ComboBox ItemTemplate 绑定到字符串集合