C# WPF中的互斥组合框
我有几个组合框,都共享同一组选项如何绑定组合框,以便在任何组合框上选择一个选项时,该选项对其余组合框不可用?这包括以前选择的组合框-如果我要为以前占用的组合框重新选择选项,可用的选项将是除其他组合框上已选择的选项之外的所有选项 这里有一个更详细的解释: 假设我有3个组合框:Combo1、Combo2、Combo3和4个可用项(“A”、“B”、“C”、“D”)C# WPF中的互斥组合框,c#,wpf,winforms,combobox,C#,Wpf,Winforms,Combobox,我有几个组合框,都共享同一组选项如何绑定组合框,以便在任何组合框上选择一个选项时,该选项对其余组合框不可用?这包括以前选择的组合框-如果我要为以前占用的组合框重新选择选项,可用的选项将是除其他组合框上已选择的选项之外的所有选项 这里有一个更详细的解释: 假设我有3个组合框:Combo1、Combo2、Combo3和4个可用项(“A”、“B”、“C”、“D”) 我在Combo1上选择“A”。Combo2和Combo3将有“B”、“C”和“D” 然后我在Combo2上选择“C”。Combo3将有“B
private ObservableCollection<string> _ItemList;
public ObservableCollection<string> ItemList
{
get
{
return _ItemList;
}
set
{
_ItemList = value;
NotifyPropertyChanged("ItemList");
}
}
public void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(name));
}
}
private observeCollection\u ItemList;
公共可观察收集项目列表
{
得到
{
返回项目列表;
}
设置
{
_ItemList=值;
NotifyPropertyChanged(“项目列表”);
}
}
public void NotifyPropertyChanged(字符串名称)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(名称));
}
}
然后将每个组合框绑定到ItemList
。但是,每当我删除在其他组合框中选择的选项时,这些组合框将变为空白。是为每个组合框维护不同列表的唯一选项,还是有更优雅的解决方案?private List\u ItemList=new List();
private List<string> _ItemList = new List<string>();
private string string1selected;
private string string2selected;
public IEnemerable<string> ItemList1
{
get
{
return _ItemList.Where(x => x != String2selected);
}
}
public string String2selected
{
get
{
return string2selected;
}
set
{
if (string2selected == value) return;
NotifypropertyChanged("String2selected");
NotifypropertyChanged("ItemList1");
}
}
选择私人字符串;
选择私人字符串;
公共IEneRemerable项目列表1
{
得到
{
返回_ItemList.Where(x=>x!=String2selected);
}
}
选择公共字符串字符串
{
得到
{
选举产生的选举结果;
}
设置
{
if(string2selected==value)返回;
NotifypropertyChanged(“String2selected”);
NotifypropertyChanged(“项目列表1”);
}
}
我有四个组合框,可以按照您的要求工作,但这是一个粗略的版本
WPF版本
XAML:
和代码隐藏:
public partial class MainWindow : Window
{
string[] list = { "", "A", "B", "C", "D" };
List<string> list1 = new List<string>() { "", "A", "B", "C", "D" };
List<string> list2 = new List<string>() { "", "A", "B", "C", "D" };
List<string> list3 = new List<string>() { "", "A", "B", "C", "D" };
List<string> list4 = new List<string>() { "", "A", "B", "C", "D" };
bool ListUpdating = false;
public MainWindow()
{
InitializeComponent();
foreach (string str in list)
{
Combo_1.Items.Add(str);
Combo_2.Items.Add(str);
Combo_3.Items.Add(str);
Combo_4.Items.Add(str);
}
}
private void Combo_1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = Combo_1.SelectedItem.ToString();
string combo2 = "";
string combo3 = "";
string combo4 = "";
try
{
combo2 = Combo_2.Text;
}
catch { }
try
{
combo3 = Combo_3.Text;
}
catch { }
try
{
combo4 = Combo_4.Text;
}
catch { }
if (combo1 == "")
{
for (int i = 0; i < list1.Count; i++)
{
if (!list2.Contains(list1[i]))
{
list2.Add(list1[i]);
Combo_2.Items.Clear();
list2.Sort();
for (int u = 0; u < list2.Count; u++)
{
Combo_2.Items.Add(list2[u]);
if (list2[u] == combo2)
Combo_2.SelectedIndex = u;
}
}
if (!list3.Contains(list1[i]))
{
list3.Add(list1[i]);
Combo_3.Items.Clear();
list3.Sort();
for (int u = 0; u < list3.Count; u++)
{
Combo_3.Items.Add(list3[u]);
if (list3[u] == combo3)
Combo_3.SelectedIndex = u;
}
}
if (!list4.Contains(list1[i]))
{
list4.Add(list1[i]);
Combo_4.Items.Clear();
list4.Sort();
for (int u = 0; u < list4.Count; u++)
{
Combo_4.Items.Add(list4[u]);
if (list4[u] == combo4)
Combo_4.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_2.Items.Count; i++)
{
if (combo1 == Combo_2.Items[i].ToString())
{
Combo_2.Items.RemoveAt(i);
list2.RemoveAt(i);
list2.Sort();
i = Combo_2.Items.Count;
}
}
for (int i = 0; i < Combo_3.Items.Count; i++)
{
if (combo1 == Combo_3.Items[i].ToString())
{
Combo_3.Items.RemoveAt(i);
list3.RemoveAt(i);
list3.Sort();
i = Combo_3.Items.Count;
}
}
for (int i = 0; i < Combo_4.Items.Count; i++)
{
if (combo1 == Combo_4.Items[i].ToString())
{
Combo_4.Items.RemoveAt(i);
list4.RemoveAt(i);
list4.Sort();
i = Combo_4.Items.Count;
}
}
}
ListUpdating = false;
}
}
private void Combo_2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = "";
string combo2 = Combo_2.SelectedItem.ToString();
string combo3 = "";
string combo4 = "";
try
{
combo1 = Combo_1.Text;
}
catch { }
try
{
combo3 = Combo_3.Text;
}
catch { }
try
{
combo4 = Combo_4.Text;
}
catch { }
if (combo2 == "")
{
for (int i = 0; i < list2.Count; i++)
{
if (!list1.Contains(list2[i]))
{
list1.Add(list2[i]);
Combo_1.Items.Clear();
list1.Sort();
for (int u = 0; u < list1.Count; u++)
{
Combo_1.Items.Add(list2[u]);
if (list1[u] == combo1)
Combo_1.SelectedIndex = u;
}
}
if (!list3.Contains(list2[i]))
{
list3.Add(list2[i]);
Combo_3.Items.Clear();
list3.Sort();
for (int u = 0; u < list3.Count; u++)
{
Combo_3.Items.Add(list3[u]);
if (list3[u] == combo3)
Combo_3.SelectedIndex = u;
}
}
if (!list4.Contains(list2[i]))
{
list4.Add(list2[i]);
Combo_4.Items.Clear();
list4.Sort();
for (int u = 0; u < list4.Count; u++)
{
Combo_4.Items.Add(list4[u]);
if (list4[u] == combo4)
Combo_4.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_1.Items.Count; i++)
{
if (combo2 == Combo_1.Items[i].ToString())
{
Combo_1.Items.RemoveAt(i);
list1.RemoveAt(i);
list1.Sort();
i = Combo_1.Items.Count;
}
}
for (int i = 0; i < Combo_3.Items.Count; i++)
{
if (combo2 == Combo_3.Items[i].ToString())
{
Combo_3.Items.RemoveAt(i);
list3.RemoveAt(i);
list3.Sort();
i = Combo_3.Items.Count;
}
}
for (int i = 0; i < Combo_4.Items.Count; i++)
{
if (combo2 == Combo_4.Items[i].ToString())
{
Combo_4.Items.RemoveAt(i);
list4.RemoveAt(i);
list4.Sort();
i = Combo_4.Items.Count;
}
}
}
ListUpdating = false;
}
}
private void Combo_3_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = "";
string combo2 = "";
string combo3 = Combo_3.SelectedItem.ToString();
string combo4 = "";
try
{
combo1 = Combo_1.Text;
}
catch { }
try
{
combo2 = Combo_2.Text;
}
catch { }
try
{
combo4 = Combo_4.Text;
}
catch { }
if (combo3 == "")
{
for (int i = 0; i < list3.Count; i++)
{
if (!list1.Contains(list3[i]))
{
list1.Add(list3[i]);
Combo_1.Items.Clear();
list1.Sort();
for (int u = 0; u < list1.Count; u++)
{
Combo_1.Items.Add(list1[u]);
if (list1[u] == combo1)
Combo_1.SelectedIndex = u;
}
}
if (!list2.Contains(list3[i]))
{
list2.Add(list3[i]);
Combo_2.Items.Clear();
list2.Sort();
for (int u = 0; u < list2.Count; u++)
{
Combo_2.Items.Add(list2[u]);
if (list2[u] == combo2)
Combo_2.SelectedIndex = u;
}
}
if (!list4.Contains(list3[i]))
{
list4.Add(list3[i]);
Combo_4.Items.Clear();
list4.Sort();
for (int u = 0; u < list4.Count; u++)
{
Combo_4.Items.Add(list4[u]);
if (list4[u] == combo4)
Combo_4.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_2.Items.Count; i++)
{
if (combo3 == Combo_2.Items[i].ToString())
{
Combo_2.Items.RemoveAt(i);
list2.RemoveAt(i);
i = Combo_2.Items.Count;
}
}
for (int i = 0; i < Combo_1.Items.Count; i++)
{
if (combo3 == Combo_1.Items[i].ToString())
{
Combo_1.Items.RemoveAt(i);
list1.RemoveAt(i);
i = Combo_1.Items.Count;
}
}
for (int i = 0; i < Combo_4.Items.Count; i++)
{
if (combo3 == Combo_4.Items[i].ToString())
{
Combo_4.Items.RemoveAt(i);
list4.RemoveAt(i);
i = Combo_4.Items.Count;
}
}
}
ListUpdating = false;
}
}
private void Combo_4_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = "";
string combo2 = "";
string combo3 = "";
string combo4 = Combo_4.SelectedItem.ToString();
try
{
combo1 = Combo_1.Text;
}
catch { }
try
{
combo2 = Combo_2.Text;
}
catch { }
try
{
combo3 = Combo_3.Text;
}
catch { }
if (combo4 == "")
{
for (int i = 0; i < list4.Count; i++)
{
if (!list1.Contains(list4[i]))
{
list1.Add(list4[i]);
Combo_1.Items.Clear();
list1.Sort();
for (int u = 0; u < list1.Count; u++)
{
Combo_1.Items.Add(list1[u]);
if (list1[u] == combo1)
Combo_1.SelectedIndex = u;
}
}
if (!list2.Contains(list4[i]))
{
list2.Add(list4[i]);
Combo_2.Items.Clear();
list2.Sort();
for (int u = 0; u < list2.Count; u++)
{
Combo_2.Items.Add(list2[u]);
if (list2[u] == combo2)
Combo_2.SelectedIndex = u;
}
}
if (!list3.Contains(list4[i]))
{
list3.Add(list4[i]);
Combo_3.Items.Clear();
list3.Sort();
for (int u = 0; u < list3.Count; u++)
{
Combo_3.Items.Add(list3[u]);
if (list3[u] == combo3)
Combo_3.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_2.Items.Count; i++)
{
if (combo4 == Combo_2.Items[i].ToString())
{
Combo_2.Items.RemoveAt(i);
list2.RemoveAt(i);
i = Combo_2.Items.Count;
}
}
for (int i = 0; i < Combo_3.Items.Count; i++)
{
if (combo4 == Combo_3.Items[i].ToString())
{
Combo_3.Items.RemoveAt(i);
list3.RemoveAt(i);
i = Combo_3.Items.Count;
}
}
for (int i = 0; i < Combo_1.Items.Count; i++)
{
if (combo4 == Combo_1.Items[i].ToString())
{
Combo_1.Items.RemoveAt(i);
list1.RemoveAt(i);
i = Combo_1.Items.Count;
}
}
}
ListUpdating = false;
}
}
}
公共部分类主窗口:窗口
{
字符串[]列表={”、“A”、“B”、“C”、“D”};
List list1=新列表(){“”,“A”,“B”,“C”,“D”};
List list2=新列表(){“”,“A”,“B”,“C”,“D”};
List list3=新列表(){“”,“A”,“B”,“C”,“D”};
List list4=新列表(){“”,“A”,“B”,“C”,“D”};
bool ListUpdating=false;
公共主窗口()
{
初始化组件();
foreach(列表中的字符串str)
{
组合_1.项目。添加(str);
组合2.项目.添加(str);
组合3.项目.添加(str);
组合4.项目.添加(str);
}
}
私有无效组合_1_SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
如果(ListUpdating==false)
{
ListUpdating=true;
字符串combo1=Combo_1.SelectedItem.ToString();
字符串组合2=“”;
字符串组合3=“”;
字符串组合4=“”;
尝试
{
combo2=Combo_2.Text;
}
捕获{}
尝试
{
combo3=Combo_3.Text;
}
捕获{}
尝试
{
combo4=Combo_4.Text;
}
捕获{}
如果(组合1==“”)
{
for(int i=0;ipublic partial class MainWindow : Window
{
string[] list = { "", "A", "B", "C", "D" };
List<string> list1 = new List<string>() { "", "A", "B", "C", "D" };
List<string> list2 = new List<string>() { "", "A", "B", "C", "D" };
List<string> list3 = new List<string>() { "", "A", "B", "C", "D" };
List<string> list4 = new List<string>() { "", "A", "B", "C", "D" };
bool ListUpdating = false;
public MainWindow()
{
InitializeComponent();
foreach (string str in list)
{
Combo_1.Items.Add(str);
Combo_2.Items.Add(str);
Combo_3.Items.Add(str);
Combo_4.Items.Add(str);
}
}
private void Combo_1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = Combo_1.SelectedItem.ToString();
string combo2 = "";
string combo3 = "";
string combo4 = "";
try
{
combo2 = Combo_2.Text;
}
catch { }
try
{
combo3 = Combo_3.Text;
}
catch { }
try
{
combo4 = Combo_4.Text;
}
catch { }
if (combo1 == "")
{
for (int i = 0; i < list1.Count; i++)
{
if (!list2.Contains(list1[i]))
{
list2.Add(list1[i]);
Combo_2.Items.Clear();
list2.Sort();
for (int u = 0; u < list2.Count; u++)
{
Combo_2.Items.Add(list2[u]);
if (list2[u] == combo2)
Combo_2.SelectedIndex = u;
}
}
if (!list3.Contains(list1[i]))
{
list3.Add(list1[i]);
Combo_3.Items.Clear();
list3.Sort();
for (int u = 0; u < list3.Count; u++)
{
Combo_3.Items.Add(list3[u]);
if (list3[u] == combo3)
Combo_3.SelectedIndex = u;
}
}
if (!list4.Contains(list1[i]))
{
list4.Add(list1[i]);
Combo_4.Items.Clear();
list4.Sort();
for (int u = 0; u < list4.Count; u++)
{
Combo_4.Items.Add(list4[u]);
if (list4[u] == combo4)
Combo_4.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_2.Items.Count; i++)
{
if (combo1 == Combo_2.Items[i].ToString())
{
Combo_2.Items.RemoveAt(i);
list2.RemoveAt(i);
list2.Sort();
i = Combo_2.Items.Count;
}
}
for (int i = 0; i < Combo_3.Items.Count; i++)
{
if (combo1 == Combo_3.Items[i].ToString())
{
Combo_3.Items.RemoveAt(i);
list3.RemoveAt(i);
list3.Sort();
i = Combo_3.Items.Count;
}
}
for (int i = 0; i < Combo_4.Items.Count; i++)
{
if (combo1 == Combo_4.Items[i].ToString())
{
Combo_4.Items.RemoveAt(i);
list4.RemoveAt(i);
list4.Sort();
i = Combo_4.Items.Count;
}
}
}
ListUpdating = false;
}
}
private void Combo_2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = "";
string combo2 = Combo_2.SelectedItem.ToString();
string combo3 = "";
string combo4 = "";
try
{
combo1 = Combo_1.Text;
}
catch { }
try
{
combo3 = Combo_3.Text;
}
catch { }
try
{
combo4 = Combo_4.Text;
}
catch { }
if (combo2 == "")
{
for (int i = 0; i < list2.Count; i++)
{
if (!list1.Contains(list2[i]))
{
list1.Add(list2[i]);
Combo_1.Items.Clear();
list1.Sort();
for (int u = 0; u < list1.Count; u++)
{
Combo_1.Items.Add(list2[u]);
if (list1[u] == combo1)
Combo_1.SelectedIndex = u;
}
}
if (!list3.Contains(list2[i]))
{
list3.Add(list2[i]);
Combo_3.Items.Clear();
list3.Sort();
for (int u = 0; u < list3.Count; u++)
{
Combo_3.Items.Add(list3[u]);
if (list3[u] == combo3)
Combo_3.SelectedIndex = u;
}
}
if (!list4.Contains(list2[i]))
{
list4.Add(list2[i]);
Combo_4.Items.Clear();
list4.Sort();
for (int u = 0; u < list4.Count; u++)
{
Combo_4.Items.Add(list4[u]);
if (list4[u] == combo4)
Combo_4.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_1.Items.Count; i++)
{
if (combo2 == Combo_1.Items[i].ToString())
{
Combo_1.Items.RemoveAt(i);
list1.RemoveAt(i);
list1.Sort();
i = Combo_1.Items.Count;
}
}
for (int i = 0; i < Combo_3.Items.Count; i++)
{
if (combo2 == Combo_3.Items[i].ToString())
{
Combo_3.Items.RemoveAt(i);
list3.RemoveAt(i);
list3.Sort();
i = Combo_3.Items.Count;
}
}
for (int i = 0; i < Combo_4.Items.Count; i++)
{
if (combo2 == Combo_4.Items[i].ToString())
{
Combo_4.Items.RemoveAt(i);
list4.RemoveAt(i);
list4.Sort();
i = Combo_4.Items.Count;
}
}
}
ListUpdating = false;
}
}
private void Combo_3_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = "";
string combo2 = "";
string combo3 = Combo_3.SelectedItem.ToString();
string combo4 = "";
try
{
combo1 = Combo_1.Text;
}
catch { }
try
{
combo2 = Combo_2.Text;
}
catch { }
try
{
combo4 = Combo_4.Text;
}
catch { }
if (combo3 == "")
{
for (int i = 0; i < list3.Count; i++)
{
if (!list1.Contains(list3[i]))
{
list1.Add(list3[i]);
Combo_1.Items.Clear();
list1.Sort();
for (int u = 0; u < list1.Count; u++)
{
Combo_1.Items.Add(list1[u]);
if (list1[u] == combo1)
Combo_1.SelectedIndex = u;
}
}
if (!list2.Contains(list3[i]))
{
list2.Add(list3[i]);
Combo_2.Items.Clear();
list2.Sort();
for (int u = 0; u < list2.Count; u++)
{
Combo_2.Items.Add(list2[u]);
if (list2[u] == combo2)
Combo_2.SelectedIndex = u;
}
}
if (!list4.Contains(list3[i]))
{
list4.Add(list3[i]);
Combo_4.Items.Clear();
list4.Sort();
for (int u = 0; u < list4.Count; u++)
{
Combo_4.Items.Add(list4[u]);
if (list4[u] == combo4)
Combo_4.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_2.Items.Count; i++)
{
if (combo3 == Combo_2.Items[i].ToString())
{
Combo_2.Items.RemoveAt(i);
list2.RemoveAt(i);
i = Combo_2.Items.Count;
}
}
for (int i = 0; i < Combo_1.Items.Count; i++)
{
if (combo3 == Combo_1.Items[i].ToString())
{
Combo_1.Items.RemoveAt(i);
list1.RemoveAt(i);
i = Combo_1.Items.Count;
}
}
for (int i = 0; i < Combo_4.Items.Count; i++)
{
if (combo3 == Combo_4.Items[i].ToString())
{
Combo_4.Items.RemoveAt(i);
list4.RemoveAt(i);
i = Combo_4.Items.Count;
}
}
}
ListUpdating = false;
}
}
private void Combo_4_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListUpdating == false)
{
ListUpdating = true;
string combo1 = "";
string combo2 = "";
string combo3 = "";
string combo4 = Combo_4.SelectedItem.ToString();
try
{
combo1 = Combo_1.Text;
}
catch { }
try
{
combo2 = Combo_2.Text;
}
catch { }
try
{
combo3 = Combo_3.Text;
}
catch { }
if (combo4 == "")
{
for (int i = 0; i < list4.Count; i++)
{
if (!list1.Contains(list4[i]))
{
list1.Add(list4[i]);
Combo_1.Items.Clear();
list1.Sort();
for (int u = 0; u < list1.Count; u++)
{
Combo_1.Items.Add(list1[u]);
if (list1[u] == combo1)
Combo_1.SelectedIndex = u;
}
}
if (!list2.Contains(list4[i]))
{
list2.Add(list4[i]);
Combo_2.Items.Clear();
list2.Sort();
for (int u = 0; u < list2.Count; u++)
{
Combo_2.Items.Add(list2[u]);
if (list2[u] == combo2)
Combo_2.SelectedIndex = u;
}
}
if (!list3.Contains(list4[i]))
{
list3.Add(list4[i]);
Combo_3.Items.Clear();
list3.Sort();
for (int u = 0; u < list3.Count; u++)
{
Combo_3.Items.Add(list3[u]);
if (list3[u] == combo3)
Combo_3.SelectedIndex = u;
}
}
}
}
else
{
for (int i = 0; i < Combo_2.Items.Count; i++)
{
if (combo4 == Combo_2.Items[i].ToString())
{
Combo_2.Items.RemoveAt(i);
list2.RemoveAt(i);
i = Combo_2.Items.Count;
}
}
for (int i = 0; i < Combo_3.Items.Count; i++)
{
if (combo4 == Combo_3.Items[i].ToString())
{
Combo_3.Items.RemoveAt(i);
list3.RemoveAt(i);
i = Combo_3.Items.Count;
}
}
for (int i = 0; i < Combo_1.Items.Count; i++)
{
if (combo4 == Combo_1.Items[i].ToString())
{
Combo_1.Items.RemoveAt(i);
list1.RemoveAt(i);
i = Combo_1.Items.Count;
}
}
}
ListUpdating = false;
}
}
}