Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定ComboBox以使用XAML更改另一个ComboBox?_C#_Wpf_Visual Studio_Xaml_Combobox - Fatal编程技术网

C# 绑定ComboBox以使用XAML更改另一个ComboBox?

C# 绑定ComboBox以使用XAML更改另一个ComboBox?,c#,wpf,visual-studio,xaml,combobox,C#,Wpf,Visual Studio,Xaml,Combobox,我已经做了一个小的示例项目来可视化。我有一个项目,其中有许多相互影响的组合框,我需要将其应用到其中 我有两个组合框,数字和颜色 数字中的SelectedItem更改项目中的颜色和SelectedItem 如何使用WPF XAML Binding ItemSource和SelectedItem实现这一点? 使用ICollection 从ObservableCollection添加/删除项目 是否创建一个列表作为集合的ItemSource 使用Add()/Remove()单独更改项目或交换整个项目

我已经做了一个小的示例项目来可视化。我有一个项目,其中有许多相互影响的组合框,我需要将其应用到其中

我有两个组合框,数字和颜色

数字中的SelectedItem更改项目中的颜色和SelectedItem

如何使用WPF XAML Binding ItemSource和SelectedItem实现这一点?

  • 使用ICollection

  • 从ObservableCollection添加/删除项目

  • 是否创建一个列表作为集合的ItemSource

  • 使用Add()/Remove()单独更改项目或交换整个项目 另一个的项目来源

  • comboBoxNumers=1,2,3,4

    ComboboxColor=红色、绿色、蓝色

    • 一,→ 红色的
    • 二,→ 绿色的
    • 三,→ 蓝色的
    • 四,→ 去掉红色,绿色。添加黄色

    • 1、2或3→ 移除黄色(如果存在)。添加红色、绿色(如果不存在)

    1→ 红色

    // Numbers 1
    if ((string)comboBoxNumbers.SelectedItem == "1")
    {
        // Remove Yellow if Exists
        if (comboBoxColors.Items.Contains("Yellow")) { 
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Yellow")); 
        }
    
        // Add Red if Does Not Exist
        if (!comboBoxColors.Items.Contains("Red")) { 
            comboBoxColors.Items.Insert(0, "Red"); 
        }
    
        // Select Red
        comboBoxColors.SelectedItem = "Red";
    }
    

    2→ 绿色

    // Numbers 2
    if ((string)comboBoxNumbers.SelectedItem == "2")
    {
        // Remove Yellow if Exists
        if (comboBoxColors.Items.Contains("Yellow")) { 
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Yellow")); 
        }
    
        // Add Green if Does Not Exist
        if (!comboBoxColors.Items.Contains("Green")) { 
            comboBoxColors.Items.Insert(1, "Green"); 
        }
    
        // Select Green
        comboBoxColors.SelectedItem = "Green";
    }
    
    // Numbers 4
    if ((string)comboBoxNumbers.SelectedItem == "4")
    {
        // Remove Red if Exists
        if (comboBoxColors.Items.Contains("Red")) { 
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Red")); 
        }
        // Remove Green if Exists
        if (comboBoxColors.Items.Contains("Green")) {
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Green")); 
        }
    
        // Add Yellow if Does Not Exist
        if (!comboBoxColors.Items.Contains("Yellow")) {
            comboBoxColors.Items.Insert(0, "Yellow"); 
        }
    
        // Select Yellow
        comboBoxColors.SelectedItem = "Yellow";
    }
    

    4→ 黄色(去掉红色/绿色)

    我一直使用的旧C#方式:

    填充组合框

    List<string> NumbersItems = new List<string>() { "1", "2", "3", "4" };
    NumbersItems.ForEach(i => comboBoxNumbers.Items.Add(i));
    
    List<string> ColorsItems = new List<string>() { "Red", "Green", "Blue" };
    ColorsItems.ForEach(i => comboBoxColors.Items.Add(i));
    
    2→ 绿色

    // Numbers 2
    if ((string)comboBoxNumbers.SelectedItem == "2")
    {
        // Remove Yellow if Exists
        if (comboBoxColors.Items.Contains("Yellow")) { 
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Yellow")); 
        }
    
        // Add Green if Does Not Exist
        if (!comboBoxColors.Items.Contains("Green")) { 
            comboBoxColors.Items.Insert(1, "Green"); 
        }
    
        // Select Green
        comboBoxColors.SelectedItem = "Green";
    }
    
    // Numbers 4
    if ((string)comboBoxNumbers.SelectedItem == "4")
    {
        // Remove Red if Exists
        if (comboBoxColors.Items.Contains("Red")) { 
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Red")); 
        }
        // Remove Green if Exists
        if (comboBoxColors.Items.Contains("Green")) {
            comboBoxColors.Items.RemoveAt(comboBoxColors.Items.IndexOf("Green")); 
        }
    
        // Add Yellow if Does Not Exist
        if (!comboBoxColors.Items.Contains("Yellow")) {
            comboBoxColors.Items.Insert(0, "Yellow"); 
        }
    
        // Select Yellow
        comboBoxColors.SelectedItem = "Yellow";
    }
    
    4→ 黄色(去掉红色/绿色)


    可以通过在ViewModel中设置两个ICollection来实现这一点,这两个ICollection将被设置为窗口的datacontext。这是一种更好的方法,主要关注数据绑定和MVVM。 另外,将一个组合框的SelectedItem绑定到viewmodel中的属性。因此,当从第一个组合中选择一个数字时,它将调用绑定属性的setter,在这个setter中,您可以修改将绑定到第二个组合框的第二个ICollection(颜色),即

    <ComboBox name="numberCmb" ItemsSource = {Binding Numbers} SelectedItem ={Binding SelectedNumber../>
    
    <ComboBox name="colorsCmb" ItemsSource = {Binding Colors} SelectedItem ={Binding SelectedColor../>
    
    您可以创建如下方法

    public void ModifyColorsCollection(int number)
    {
    //Logic to modify Colors collection here only
    }
    

    编写一个视图模型。“从ObservableCollection添加/删除项目”。将集合绑定到
    组合框。项目资源
    ,永远不要直接触摸
    项目
    。谢谢,我会尝试一下,然后再了解它的运行情况。