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】:假设您的窗口/页面中有一个名为Foos
的List<Foo>
。 Foo
有一个属性 Name
。现在您在 XAML 中设置绑定,如下所示:
<ComboBox ItemsSource="Binding Path=Foos"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="Binding Path=Foo"
/>
这是基于this SO question。 Read this(WPF 数据绑定概述)作为 WPF 中数据绑定的良好基础。
【讨论】:
是的,但目前我对 List如果您只指定路径,则绑定假定容器 DataContext 作为源。顺便说一句,有用的属性是在容器上定义的(例如窗口)。
您可以按如下方式解决它(在 xaml 中):
ItemsSource="Binding Path=MyProperty, RelativeSource=RelativeSource Mode=FindAncestor, AncestorType=x:Type Window"
【讨论】:
我试过这个马里奥!但运气不好!我无法让它填充。 view 是从 baseView 继承的,所以我放的是我的 baseView 而不是 window!它仍然没有被绑定!以上是关于WPF 数据绑定组合框到列表<string>的主要内容,如果未能解决你的问题,请参考以下文章