Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Listview以显示ObservableSelection_C#_Wpf_Collections_Wpf Controls_Observablecollection - Fatal编程技术网

C# Listview以显示ObservableSelection

C# Listview以显示ObservableSelection,c#,wpf,collections,wpf-controls,observablecollection,C#,Wpf,Collections,Wpf Controls,Observablecollection,我有学生表、课程表和学生课程表。在我的WPF中,我使用组合框进行“学生”选择。如何使用ObservableCollection在列表视图中显示相应的课程及其属性(CourseID、CourseName、Credit)?。这是我的组合框SelectionChanged事件代码 private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { int MySelect

我有学生表、课程表和学生课程表。在我的WPF中,我使用组合框进行“学生”选择。如何使用ObservableCollection在列表视图中显示相应的课程及其属性(CourseID、CourseName、Credit)?。这是我的组合框SelectionChanged事件代码

 private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        int MySelect = (int)this.comboBox1.SelectedValue;
        var SelectedStudent = db.Students.Include("StudentCourses.Course").SingleOrDefault(f => f.StudentID == MySelect);

如果您还没有,我强烈建议您使用MVVM样式的方法。ListView的ItemsSource应绑定到ViewModel中的ObservableCollection,组合框的SelectedItem也应绑定到ViewModel上的属性。当SelectedItem更改并调用属性的setter时,将更新ListView绑定到的ObservableCollection

更新:

下面是一个部分实施的解决方案:

XAML:


代码:

公共班级学生
{
公共字符串名称{get;set;}
公共列表CourseIds{get;set;}
} 
公共课
{
公共字符串名称{get;set;}
公共字符串Id{get;set;}
公共积分{get;set;}
}
公共类视图模型:INotifyPropertyChanged
{
公共可观察集合学生课程{get;set;}
公共可观察集合学生{get;set;}
公共学生选择的组合项目
{
获取{return selectedComboItem}
设置{
selectedComboItem=值;
学生课程;
foreach(课程中的课程)
if(selectedComboItem_uu.CourseIds.Contains(course.Id))
学生课程。添加(课程);
PropertyChanged(这是新的PropertyChangedEventArgs(“SelectedComboItem”);
}
}
私人列表课程\=新列表();
私人学生选择的ComboItem_u2;;
…//读取数据库并生成集合
公共事件属性更改事件处理程序属性更改;
}
<DockPanel>
    <ComboBox ItemsSource="{Binding Students}" SelectedItem="{Binding SelectedComboItem}" DockPanel.Dock="Top">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

    <ListView ItemsSource="{Binding StudentCourses}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Name, StringFormat={}Name: {0}}"/>
                    <TextBlock Text="{Binding Id, StringFormat={}Id: {0}}"/>
                    <TextBlock Text="{Binding Credit, StringFormat={}Credit: {0}}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</DockPanel>
public class Student
{
    public string Name { get; set; }
    public List<string> CourseIds { get; set; }
} 


public class Course
{
    public string Name { get; set; }
    public string Id { get; set; }
    public int Credit { get; set; }
}


public class ViewModel : INotifyPropertyChanged
{
    public ObservableCollection<Course> StudentCourses { get; set; }
    public ObservableCollection<Student> Students { get; set; }


    public Student SelectedComboItem
    {
        get { return selectedComboItem_; }
        set {
            selectedComboItem_ = value;
            StudentCourses.Clear();
            foreach(Course course in courses_)
                if(selectedComboItem_.CourseIds.Contains(course.Id))
                    StudentCourses.Add(course);
            PropertyChanged(this, new PropertyChangedEventArgs("SelectedComboItem"))    ;
        }
    }


    private List<Course> courses_ = new List<Course>();
    private Student selectedComboItem_;


    ... // Read DB and build collections

    public event PropertyChangedEventHandler PropertyChanged;
}