2016-09-10 3 views
1

예를 들어 래퍼가 있습니다.동적 데이터 격자 컬렉션을 기반으로하는 열

public class Student{ 
     public string Name{get;set} 
     public int IDNumber{get;set;} 
     public ObservableCollection<SubjectWrapper> Subjects{get;set;} 

} 
public class SubjectWrapper{ 
     public string SubjectName{get;set;} 
     public bool IsSubjectSelected{get;set;} 
} 

어떻게 데이터 그리드에 효율적으로 바인딩 할 수 있습니까? 모든 subject.All 학생들은 거기에 대해 모든 제목 컬럼을 가질 것입니다. 다음 이미지를 참조하십시오. 또한 MVVM 패턴 (코드가 적음)을 따르고 싶습니다.

UI Mock up

답변

1

enter image description here

XAML

public partial class MainWindow : Window { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      var student = new Student(){ Name = "Ebin"}; 
      student.Subjects.Add(new SubjectWrapper() { SubjectName="subject1",IsSubjectSelected=true }); 
      student.Subjects.Add(new SubjectWrapper(){ SubjectName = "subject2", IsSubjectSelected = false}); 

      var student2 = new Student() { Name = "Ravi" }; 
      student2.Subjects.Add(new SubjectWrapper() { SubjectName = "subject1", IsSubjectSelected = false }); 
      student2.Subjects.Add(new SubjectWrapper() { SubjectName = "subject2", IsSubjectSelected = true }); 


      var list = new List<Student>(); 
      list.Add(student); 
      list.Add(student2); 

//Name column adding 
      maingrid.Columns.Add(new DataGridTextColumn(){ Header = "name", Binding = new Binding("Name")}); 

//Subject columns added dynamically 
      for (int i = 0; i < list[0].Subjects.Count(); i++) { 

       var col = new DataGridCheckBoxColumn(); 
       col.Header = list[0].Subjects[i].SubjectName; 
       col.Binding = new Binding("Subjects[" + i.ToString() + "].IsSubjectSelected"); 
       maingrid.Columns.Add(col); 
      } 

      maingrid.ItemsSource = list; 


     } 
    } 



    public class Student 
    { 
     public string Name { get; set; } 
     public int IDNumber { get; set; } 
     public ObservableCollection<SubjectWrapper> Subjects { get; set; } 

     public Student() 
     { 
      Subjects = new ObservableCollection<WpfApplication1.SubjectWrapper>(); 

     } 
    } 
    public class SubjectWrapper { 
     public string SubjectName { get; set; } 
     public bool IsSubjectSelected { get; set; } 
    } 
관련 문제