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的属性

ComboBox在WPF中的绑定示例:绑定项集合转换,及其源代码

WPF Combobox数据绑定Binding

WPF MVVM 将 ComboBox 绑定到 Datagrid 选定项