2011-01-08 117 views
0

我有这两个组合框绑定到2个不同的数据库表。首先必须与动物类(例如爬行动物,哺乳动物,两栖动物等)一栏列表和其他有两个列动物名称及其各自的动物类(例如蜥蜴 - 爬行动物,蛇 - 爬行动物,狗 - 哺乳动物,青蛙 - 两栖动物)。现在我想要的是,当我选择组合框1中的项目时,组合框2应该具有与组合框1中选择的项目相匹配的动物的各个列表以及每个动物的相应动物类别。一个组合框依赖于WPF中的其他组合框

这里是我做了什么至今

<ComboBox Grid.Column="2" Grid.Row="4" Margin="3,1,3,1" 
     Name="comboBox1" 
     ItemsSource="{Binding Source={StaticResource NameListData}, Path=Animal}" 
     Selectionchanged="comboBox1_Selectionchanged" /> 
    <ComboBox Grid.Column="2" Grid.Row="5" Margin="3,1,3,1" 
     Name="comboBox2" 
     ItemsSource="{Binding Source={StaticResource NameListData}, Path=Stream}" /> 

的selection_changed功能

private static string aa; 
private void comboBox1_Selectionchanged(object sender, SelectionchangedEventArgs e) 
{ 
aA = comboBox1.SelectedItem.ToString(); 
} 

public static string aA 
{ 
get { return aa; } 
set { aa = value; } 
} 

到2个组合框结合并位于MainViewModel类集合

DataClasses1DataContext dc = new DataClasses1DataContext(); 
public List<string> Animal 
{ 
get 
{ 
List<string> facult = new List<string>(); 

foreach (var a in dc.Faculties) 
{ 

facult.Add(a.Animal1.ToString()); 
} 

return facult; 
} 
} 


string selection; 

public List<string> Stream 
{ 

get 
{ 
selection = Schooling.Pages.NewStudentGeneral.aA; 
List<string> stream = new List<string>(); 

var q = from c in dc.Streams where c.faculty ==selection select c; 
foreach (var b in q) 
{ 
stream.Add(b.stream1); 
} 

return stream; 
} 
} 

这里的选择字符串没有得到在combobox1 b中选择的值因为每当我硬编码和指定下面的声明中的选择部分

1 var q = from c in dc.Streams where c.faculty =="Reptiles" select c; 

将给各个动物的爬行动物。

我猜如果选择变量获得了combobox1的选定值,我的问题已解决。或者我在这里做错了什么?请帮忙。

回答

0

你需要以某种方式告诉你的第二个组合框,它需要更新它的项目,你可以通过执行INotifyPropertyChanged/INotifyCollectionChanged或手动执行。由于第一个ComboBox中的选择更改有明确的事件,所以您可能还需要手动更新第二个,这可能可以通过更改处理程序完成,如下所示:

private void comboBox1_Selectionchanged(object sender, SelectionchangedEventArgs e) 
{ 
     aA = comboBox1.SelectedItem.ToString(); 
     comboBox2.GetBindingExpression(ComboBox.ItemsSourceProperty).UpdateTarget(); 
}