C# 绑定ComboBox以使用XAML更改另一个ComboBox?
我已经做了一个小的示例项目来可视化。我有一个项目,其中有许多相互影响的组合框,我需要将其应用到其中 我有两个组合框,数字和颜色 数字中的SelectedItem更改项目中的颜色和SelectedItem 如何使用WPF XAML Binding ItemSource和SelectedItem实现这一点?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()单独更改项目或交换整个项目
- 一,→ 红色的
- 二,→ 绿色的
- 三,→ 蓝色的
- 四,→ 去掉红色,绿色。添加黄色
- 1、2或3→ 移除黄色(如果存在)。添加红色、绿色(如果不存在)
// 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添加/删除项目”。将集合绑定到
组合框。项目资源
,永远不要直接触摸项目
。谢谢,我会尝试一下,然后再了解它的运行情况。