EMBI: žádné chyby právě nikde zalogované nejsou. ViewModel vypadá takto:
public class FormDetailVM : INotifyPropertyChanged
{
public ObservableCollection<Student> Students { get; set; }
public ObservableCollection<Student> Students2 { get; set; }
public ObservableCollection<Student> Students3 { get; set; }
private ClassForm classForm;
public ClassForm ClassForm
{
get
{
return classForm;
}
set
{
classForm = value;
if (classForm.FormData != null)
{
FormData = JsonSerializer.Deserialize<ClassFormData>(classForm.FormData);
}
else
{
FormData = new ClassFormData();
}
}
}
private SchoolYearClass schoolYearClass;
public SchoolYearClass SchoolYearClass
{
get
{
return schoolYearClass;
}
set
{
schoolYearClass = value;
LoadStudents();
}
}
public ClassFormData FormData { get; set; }
public FormDetailVM()
{
Students = new ObservableCollection<Student>();
Students2 = new ObservableCollection<Student>();
Students3 = new ObservableCollection<Student>();
FormData = new ClassFormData();
}
public void saveFormData()
{
using (var dbContext = new ApplicationDbContext())
{
dbContext.ClassForms.Attach(ClassForm);
ClassForm.FormData = JsonSerializer.Serialize(FormData);
dbContext.SaveChanges();
}
}
private void LoadStudents()
{
Students.Clear();
Students2.Clear();
Students3.Clear();
using (var dbContext = new ApplicationDbContext())
{
dbContext.SchoolYearClasses.Attach(schoolYearClass);
foreach (Student student in schoolYearClass.Students)
{
if (classForm.Student.Id == student.Id)
{
continue;
}
Students.Add(student);
Students2.Add(student);
Students3.Add(student);
}
}
OnPropertyChanged("Students");
OnPropertyChanged("Students2");
OnPropertyChanged("Students3");
}
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Mimochodem, rovnou položím ještě dotaz ohledně ItemsSource - vůbec netuším, jak to pracuje interně při bindování, ale měl jsem za to, že to je jen zdroj dat, které zobrazuje ve view. Ale nejspíš si tam nějak interně ukládá i nějaké stavy, asi v tom ObservableCollection? Protože původně jsem myslel, že mi bude stačit pro ItemsSource jen jeden ObservableCollection, který použiju pro více ComboBoxů (výběr ze seznamu studentů). Jenže se to pak chová blbě, při výběru v jiném comboboxu se zruší výběr v předchozím atd. Tj. ve výsledku musím mít pro každý ComboBox sólo ObservableCollection. Skutečně to nelze udělat jedním?