2012-04-17 3 views
1

У меня есть таблица для студентов, таблица курса и таблица StudentCourse. На моем WPF я делаю выбор «Студент» с помощью комбинированного блока. Как я могу отобразить соответствующий Курс и его свойства (CourseID, CourseName, Credit) в списке, используя ObservableCollection ?. Вот мой код для комбинированного блока SelectionChanged событияListview для отображения ObservableSelection

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); 

ответ

3

Если вы не сделали, я бы настоятельно рекомендовал использовать MVVM стиль подхода. Элемент ListSource ListView должен быть привязан к ObservableCollection в вашей ViewModel, и ваш SelectedItem вашего ComboBox также должен быть привязан к проэтике на вашем ViewModel. Когда SelectedItem изменяет и вызывает обновление установщика свойства ObservableCollection, к которому привязан ListView.

Update:

Вот частично реализованное решение:

XAML:

<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; 
} 
+0

Вы можете показать или указать мне подробный пример? – DevEx