WPF 将集合绑定到 ComboBox 并选择一个项目
Posted
技术标签:
【中文标题】WPF 将集合绑定到 ComboBox 并选择一个项目【英文标题】:WPF Binding Collection To ComboBox and Selecting an item 【发布时间】:2010-09-23 13:45:13 【问题描述】:一段时间以来,我一直在反对这个问题。我不确定为什么它不起作用。我对整个 WPF 业务还是很陌生。
这是我的组合框 XAML
<ComboBox
SelectedValuePath="Type.FullName"
SelectedItem="Binding Path=Type"
Name="cmoBox" />
这是填充 ComboBox 的内容(myAssembly 是我使用可能类型列表创建的一个类)
cmoBox.ItemsSource = myAssembly.PossibleTypes;
我在后面的代码中将 DataContext 设置在 ComboBox 的父元素中,如下所示:
groupBox.DataContext = listBox.SelectedItem;
我希望绑定从组合框中选择正确的“可能类型”。它不选择任何东西。我已经尝试过 SelectedValue 和 SelectedItem。当我将 ComboBox 的 DisplayMemberPath 更改为不同的属性时,它改变了显示的内容,所以我知道它并没有完全损坏。
有什么想法吗???
【问题讨论】:
【参考方案1】:在 XAML 中,设置 ItemsSource="Binding"
并(在后面的代码中)将 DataContext
设置为 myAssembly.PossibleTypes
。
【讨论】:
:) 我没有测试它...但是我最近已经进入 WPF 很多(由于在工作中使用它)...我认为这要么 100% 正确,或离开。【参考方案2】:您还可以在 xaml 中而不是在代码隐藏中设置绑定(我们尽可能避免在 xaml 页面中隐藏代码)。我假设 myAssembly 是控件的代码隐藏属性,并且是 MyAssembly 类的实例...
<UserControl
x:Class="MyNamespace.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="Binding">
<ComboBox
Width="200"
ItemsSource="Binding Path=myAssembly.PossibleTypes"
SelectedValuePath="Type.FullName"
SelectedItem="Binding Path=Type"
Name="cmoBox" />
</UserControl>
这可能只是个人喜好,但我认为在 xaml 中进行数据绑定是更好的做法,因为这样可以更轻松地查看每个控件绑定的内容,而无需浏览代码隐藏。此外,如果您想在代码中引用您的 ComboBox,您应该在 xaml 中为其分配一个 x:Name 属性,而不仅仅是 Name。
【讨论】:
【参考方案3】:我同意:绑定应该在 XAML 中。我把...检查..在后面的代码中根本没有,永远。数据源都是可重复使用的“资源”。
(好吧,代码隐藏构造函数调用 InitializeComponent())。
【讨论】:
您根本没有回答这个问题。除了不使用代码的不相关偏好之外,您什么都没有添加。此外,在您发布“答案”之前的 18 个月,该问题已得到正确回答。由于这些原因,-1.以上是关于WPF 将集合绑定到 ComboBox 并选择一个项目的主要内容,如果未能解决你的问题,请参考以下文章
WPF ComboBox ItemTemplate 绑定到字符串集合
WPF ComboBox 绑定到不显示所选项目文本的用户控件集合
c#wpf combobox将source绑定到一个collection,item作为另一个collection的属性