【问题标题】:Combobox databinding with multiple sources具有多个源的组合框数据绑定
【发布时间】:2012-09-01 08:25:11
【问题描述】:

我最近从 Visual Basic 5 切换到 Visual Basic .NET,我正在尝试学习 WPF,将旧程序从 Windows 窗体(使用 Visual Basic 5 编写)转换为 WPF&VB.NET。

在旧程序中,我有一个组合框,其中包含从访问数据库加载的信息(带有 item_id 和 item_description 的简单表)。单击组合框中的项目会导致 id 保存在一个类中(将其信息保存在数据库中的不同表中)

现在我正在尝试在 WPF 中重新创建相同的东西。

我想知道是否可以让组合框显示项目列表中的项目,将其项目源绑定到项目列表视图模型,但在我更改所选项目时更新另一个视图模型。

我不知道这是否可行(老实说,我试图在网络上找到答案,但寻找“组合框多个数据绑定”我最终找到了对我没有帮助的信息)

【问题讨论】:

    标签: wpf vb.net data-binding combobox


    【解决方案1】:

    不确定我是否真的理解您的意思,但您可以设置一个 itemsource,它将作为组合框的内容。也可以将组合框的选定值绑定到另一个属性。

    <ComboBox ItemSource="ListItems" SelectedValuePath="item_id" SelectedValue={Binding IdSelected} DisplayMemberPath="item_description"/>
    

    在此示例中,ListItems 将是包含项目的列表,SelectedValuePAth 将是组合框 SelectedValue 属性将返回的属性名称。 SelectedValue 绑定到需要此信息的其他对象的属性。 DisplayMemberPath 是向用户显示的属性。

    您可以在运行时使用 CboItem.Itemssource = listItem 设置 itemssource,它可以是几乎任何类型的集合(列表、数据集、数组等)

    希望对您有所帮助。

    【讨论】:

    • 是的,你有我的问题...,但我看不到在哪里指定 IdSelected 所属的对象...(在代码中使用 CboItem.itemssource=listItem 与在 XAML 中使用 ItemSource="ListItems",不是吗?)
    • IdSelected 将来自您希望使用的其他对象。除非我对你在做什么有更多的了解,否则我无法直接帮助你。但是,我很确定网上有很好的教程。也许 WPFTutorial 有一些很好的信息。
    • 我的错误是由于一个“奇怪的想法”:我认为 itemssource 必须是来自我想要存储所选 id 的同一对象的集合。我遇到了问题,因为我总是试图将 2 viewModel 关联到同一个组合框。现在,我将 viewModel 正确关联到组合框的 DataContext(将 SelectedValue 绑定到正确的属性)和一个简单的项目集合作为 itemsSource。感谢您的建议