【问题标题】:Populate one combobox based on selected value of another combobox根据另一个组合框的选定值填充一个组合框
【发布时间】:2012-06-12 05:13:21
【问题描述】:

我有多个组合框(具体来说:3),每个组合框的值取决于前一个组合框的选定值。有关如何在 WPF 中实现此功能的任何建议?

每个组合框都有列表作为其项目来源。

【问题讨论】:

    标签: .net wpf combobox


    【解决方案1】:

    让我们假设您的组合框的名称是 comboBox1,comboBox2comboBox3 下面我只举一个事件的例子。在此基础上,您可以为所有组合框触发事件。

    comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
    

    这是事件调用

    void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        comboBox2.SelectedIndex = comboBox1.SelectedIndex;
    //do other work here
    }
    

    【讨论】:

      【解决方案2】:

      我的应用程序中确实有类似的东西。您必须使用 ObservableCollection 而不是 List。

      我有 2 个 ComboBoxes,您可以选择在第一个 ComboBox 中“分组”结果,如果您愿意,可以在第二个 ComboBox 中进行更详细的说明。

      第一个有“安全、国家、部门”,第二个可以有证券、国家或部门的列表...取决于第一个选择。

      为此,我将组合框绑定到 ObservableCollection。当用户在 ComboBox1 中选择某些内容时,我将从 SelectionChanged 事件中知道它,并将用国家、部门或证券填充 ComboBox2 的 ObservableCollection。

      ObservableCollection 将“自动”通知 comboBox2 有新项目,它会刷新。

      哦,要让它工作,你必须使用 MVVM 模式......但我假设你已经在使用它了。

      【讨论】:

      • 当上一个组合框的元素发生变化时,我改变了组合框的项目来源。另外感谢您的解决方案,我也会尝试实施它。
      【解决方案3】:

      应该是这样的:

      <ComboBox x:Name="cbModels"
       ItemsSource="{Binding ElementName=comboBox1,Path=SelectedItem.Orders}"
       DisplayMemberPath="OrderId"/>
      

      SelectedItem.Orders 显示在comboBox1 中选择的客户的订单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-29
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多