我已经制作了一个可视化的小示例项目。我有一个包含许多组合框的项目,这些组合框会相互影响我需要将其应用到。
我有两个组合框,数字和颜色。
数字中的 SelectedItem 会更改 项目 & 颜色中的 SelectedItem 。
如何使用WPF XAML Binding ItemSource和SelectedItem执行此操作?
使用ICollection?
从ObservableCollection添加/删除项目?
创建一个List作为Collection的ItemSource?
使用Add()/ Remove()或Swap the Entire分别更改项目 ItemSource是另一个?
comboBoxNumers = 1,2,3,4
comboBoxColors =红色,绿色,蓝色
4→删除红色,绿色。添加黄色。
1,2或3→删除黄色(如果存在)。添加红色,绿色(如果不存在)。
1→红色
2→绿色
4→黄色(删除红色/绿色)
老C#方式我正在使用:
填充ComboBox
onNestedScroll
1→红色
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 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";
}
4→黄色(删除红色/绿色)
// 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";
}
答案 0 :(得分:1)
您可以通过在ViewModel中设置两个ICollections来实现此目的,该视图将被设置为窗口的datacontext。这是更好的方法,并专注于数据绑定和MVVM。 另外,将一个comboBox的SelectedItem绑定到viewmodel中的属性。因此,当从第一个组合中选择一个数字时,它将调用绑定属性的setter,并且在这个setter中,你可以修改第二个ICollection(Colors),它将绑定到第二个组合框,即
brm
在ViewModel中
<ComboBox name="numberCmb" ItemsSource = {Binding Numbers} SelectedItem ={Binding SelectedNumber../>
<ComboBox name="colorsCmb" ItemsSource = {Binding Colors} SelectedItem ={Binding SelectedColor../>
您可以创建类似
的方法public ICollection Numbers {get;set {RaisePropertyChanged("Numbers")}
public ICollection Colors {get;set {RaisePropertyChanged("Colors")}
public int SelectedNumber
{
get{ return _selectedNumber; }
set
{
_selectedNumber = value;
RaisePropertyChanged("SelectedNumber");
//
Here Modify the Colors collections by calling other method which can filter or modify Colors using LINQ i.e.
ModifyColorsCollection(value);
//
}