C# 如何通过WPF组合框选择从数据库填充列表集合
我有多对多表,希望显示WPF控件中的一些字段 每当我在组合框中选择讲师ID时,如何填写列表集合C# 如何通过WPF组合框选择从数据库填充列表集合,c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,我有多对多表,希望显示WPF控件中的一些字段 每当我在组合框中选择讲师ID时,如何填写列表集合list courses=new list()?我只想在ListView控件的列表中显示CourseID和标题 这是我的密码: public partial class MainWindow : Window { SchoolEntities db = new SchoolEntities(); public MainWindow() { InitializeC
list courses=new list()
?我只想在ListView控件的列表中显示CourseID和标题
这是我的密码:
public partial class MainWindow : Window
{
SchoolEntities db = new SchoolEntities();
public MainWindow()
{
InitializeComponent();
var instructors = db.Instructors.Where(f => f.HireDate == 2011).ToList();
this.comboBox1.ItemsSource = instructors;
this.comboBox1.DisplayMemberPath = "LastName";
this.comboBox1.SelectedValuePath = "InstructorID";
}
List<Course> courses = new List<Course>();
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int S = (int)this.comboBox1.SelectedValue;
var InstrSelection = db.Instructors.Include("CourseInstructors.Course").SingleOrDefault(f => f.InstructorID == S);
foreach (var C in InstrSelection.CourseInstructors)
{
courses.Add(C.Course);
}
this.listView1.DataContext = null;
this.listView1.DataContext = courses;
}
}
公共部分类主窗口:窗口
{
SchoolEntities db=新的SchoolEntities();
公共主窗口()
{
初始化组件();
var instructors=db.instructors.Where(f=>f.HireDate==2011).ToList();
this.comboBox1.ItemsSource=讲师;
this.comboBox1.DisplayMemberPath=“LastName”;
this.comboBox1.SelectedValuePath=“InstructorID”;
}
列表课程=新列表();
private void comboBox1\u SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
int S=(int)this.comboBox1.SelectedValue;
var InstrSelection=db.Instructors.Include(“CourseInstructors.Course”).SingleOrDefault(f=>f.InstructorID==S);
foreach(指令选择课程指令中的变量C)
{
增加(C.课程);
}
this.listView1.DataContext=null;
this.listView1.DataContext=课程;
}
}
窗口是xaml
<Window x:Class="School.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="773" Width="677">
<Grid>
<ComboBox Height="23" HorizontalAlignment="Left" Name="comboBox1" SelectionChanged="comboBox1_SelectionChanged"></ComboBox>
<ListView HorizontalAlignment="Left" Name="listView1">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header= "CourseID" />
<GridViewColumn Width="140" Header= "Title" />
</GridView>
</ListView.View>
</ListView>
</Grid>
我将使我的父数据模型包含子数据模型的集合,并将子
组合框
绑定到父组合框
例如,您的讲师
模型将包含
int InstructorId
string FirstName
string LastName
DateTime HireDate
List Courses
我不确定我是否理解你的要求。您只是想知道为什么您当前的代码没有在ListView中显示任何课程吗?如果是这样,那么您的问题是您在设置ItemsSource时正在设置ListView的DataContext。在添加新课程之前,您可能还需要清除课程列表:
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
courses.Clear();
...
this.listView1.ItemsSource = null; // ItemsSource instead of DataContext
this.listView1.ItemsSource = courses;
}
编辑
您还必须将DisplayMemberBindings添加到GridViewColumns:
<GridViewColumn
Width="140"
Header="CourseID"
DisplayMemberBinding="{Binding CourseID}" /> <!-- Here -->
<GridViewColumn
Width="140"
Header="Title"
DisplayMemberBinding="{Binding Title}" /> <!-- And Here -->
我的答案的第一部分有帮助吗?我使用了ItemSource并在ListView列中显示了我的名称空间School.Course。有什么我遗漏的吗?
<GridViewColumn
Width="140"
Header="CourseID"
DisplayMemberBinding="{Binding CourseID}" /> <!-- Here -->
<GridViewColumn
Width="140"
Header="Title"
DisplayMemberBinding="{Binding Title}" /> <!-- And Here -->