【发布时间】:2015-04-07 14:47:04
【问题描述】:
我有 3 个组合框
<Grid>
<ComboBox Name="cbo1" SelectionChanged="OnComboBoxChanged" />
<ComboBox Name="cbo2" SelectionChanged="OnComboBoxChanged"/>
<ComboBox Name="cbo3" SelectionChanged="OnComboBoxChanged" />
组合框的列表是 { a,b,c,d} 因此,如果在第一个框中选择了“b”,则下拉菜单不应包含 b,如果第二个设置为 a,则需要使用 {a,c,d} 进行更新,那么最后一个需要具有 {c, d}。如果他们返回并更改任何内容,我们需要相应地更新列表。我添加了一个事件 oncomboboxchanged 但它没有更新组合框,当我将项目源设置为新列表时。
private List<string> comboList = new List<string>();
string[] defaultParam = { "A", "B", "C", "D" };
public MainWindow()
{
InitializeComponent();
foreach(string s in defaultParam)
{
LoadCombo(s);
}
}
public void LoadCombo(string name)
{
comboList.Add(name);
cbo1.ItemsSource = comboList;
cbo2.ItemsSource = comboList;
cbo3.ItemsSource = comboList;
}
private void OnComboBoxChanged(object sender,SelectionChangedEventArgs e)
{
var combo = sender as ComboBox;
string oldval = combo.Text;
string id = combo.Name;
string itemSel = (sender as ComboBox).SelectedItem.ToString();
comboList.Remove(itemSel);
//add old value only if it is not empty
if (!string.IsNullOrEmpty(oldval))
{
comboList.Add(oldval);
}
combo.ItemsSource = comboList;
ComboBox[] comboNameLst = {cbo1,cbo2,cbo3 };
foreach (ComboBox cbo in comboNameLst)
{
if (id != cbo.Name)
{
if (cbo.SelectedItem == null)
{
cbo.ItemsSource = comboList;
}
else if (cbo.SelectedItem != null)
{
string tempitemsel = cbo.SelectedItem.ToString();
comboList.Add(tempitemsel);
cbo.ItemsSource = comboList;
comboList.Remove(tempitemsel);
}
}
}
}
所以 cbo.ItemSource 没有做任何事情,我是否需要做任何不同的事情才能看到更新。
【问题讨论】:
-
什么是 comboList ?您首先在哪里提供 itemssource?
-
我用添加到项目源的代码编辑了帖子
-
如果你从第一秒选择 a 将有 BCD,如果你在第二秒选择 b A 仍然有 ABCD?
-
所有项目都不应重复