【问题标题】:Dynamic Datagrid Columns based on collection基于集合的动态 Datagrid 列
【发布时间】:2016-09-10 11:04:36
【问题描述】:

例如,我有一个包装器。

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

我怎样才能有效地将它绑定到 Datagrid。可能有任意数量的主题。所有学生都将拥有所有主题列与那里的名称。请看下图。另外我想遵循 MVVM 模式(后面的代码更少)。

【问题讨论】:

    标签: c# wpf mvvm window


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多