WPF C# Binding со связями ObservableCollection

162
05 декабря 2017, 17:55

Не bind`ся связанные данные

XAML:

        <Grid Grid.Column="0">
        <ListBox ItemsSource="{Binding Pupils}" SelectedItem="{Binding SelectedPupil}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" >
                        <TextBlock Margin="3" Text="{Binding Path=FirstName}" /> 
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>            
    </Grid>
    <Grid Grid.Column="1">
        <StackPanel  Orientation="Vertical" DataContext="{Binding SelectedPupil}">
            <TextBlock Text="{Binding LastName,UpdateSourceTrigger=PropertyChanged}"/>
            <TextBlock Text="{Binding  FirstName,UpdateSourceTrigger=PropertyChanged}"/>
    <TextBlock Text="{Binding  MiddleName,UpdateSourceTrigger=PropertyChanged}"/>
    <TextBlock Text="{Binding  BirthDate,UpdateSourceTrigger=PropertyChanged}"/>
    <TextBlock Text="{Binding  Gender,UpdateSourceTrigger=PropertyChanged}"/>
    <TextBlock Text="{Binding  PupilParents.LastName,UpdateSourceTrigger=PropertyChanged}"   />
    <TextBlock Text="{Binding    PupilParents.FirstName,UpdateSourceTrigger=PropertyChanged}"   />
       </StackPanel>
    </Grid>

Models:

 class Human:INotifyPropertyChanged
{
    private string middleName;
    private string lastName;
    private string firstName;
    private string gender;
    private DateTime? birthDate;
    private string homeAdress;
      [Key]
    public int ID { get; set; }
    public string MiddleName
    {
        get { return middleName; }
        set
        {
            middleName = value;
            OnPropertyChanged();
        }
    }
    public string LastName
    {
        get { return lastName; }
        set
        {
            lastName = value;
            OnPropertyChanged();
        }
    }
    public string FirstName
    {
        get
        {
            return firstName;
        }
        set
        {
            firstName = value;
            OnPropertyChanged();
        }
    }
    public string Gender
    {
        get
        {
            return gender;
        }
        set
        {
            gender = value;
            OnPropertyChanged();
        }
    }
    [CanBeNull]
    public DateTime? BirthDate
    {
        get
        {
            return birthDate;
        }
        set
        {
            birthDate = value;
            OnPropertyChanged();
        }
    }
    public string HomeAdress
    {
        get { return homeAdress; }
        set
        {
            homeAdress = value;
            OnPropertyChanged();
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

class Pupil:Human
{
    private DateTime? dateOfAdmission;
    private DateTime? dateOfGraduation;
   private string phoneNumber;
   [CanBeNull]
    public DateTime? DateOfAdmission
    {
        get
        {
            return dateOfAdmission;
        }
        set
        {
            dateOfAdmission = value;
            OnPropertyChanged();
        }
    }
   [CanBeNull]
    public DateTime? DateOfGraduation
    {
        get
        {
            return dateOfGraduation;
        }
        set { dateOfGraduation = value; 
        OnPropertyChanged(); }
    }

    public string PhoneNumber
    {
        get { return phoneNumber; }
        set
        {
            phoneNumber = value;
            OnPropertyChanged();
        }
    }
    public ObservableCollection<PupilParent> PupilParents { get; set; }
    public ObservableCollection<PupilTeacher> PupilTeachers { get; set; }
    public ObservableCollection<Subject> Subjects { get; set; }
    public ObservableCollection<PupilGroup> PupilGroups { get; set; }
}
 class Parent:Human
{
    public ObservableCollection<PupilParent> PupilParents { get; set; }
}

VIEW:

class PupilViewModel:INotifyPropertyChanged
{
SchoolModel _db = new SchoolModel();
    public ObservableCollection<Pupil> Pupils { get; set; }
    private Pupil selectedPupil;
    public Pupil SelectedPupil
    {
        get
        {
            return selectedPupil;
        }
        set
        {
            selectedPupil = value;
            OnPropertyChanged();
        }
    }
    public PupilViewModel()
    {
        Pupils = new ObservableCollection<Pupil>(_db.Pupils.Include(b=>b.PupilParents ).ThenInclude(b=>b.Parent).Include(b=>b.PupilGroups).ThenInclude(b=>b.Group));
    }

    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

MainWindow:

 public MainWindow()
    {

        InitializeComponent();
        //using (var _db = new SchoolModel())
        //{
        //    var pupil = new Pupil()
        //    {
        //        LastName = "Pupil1",FirstName = "Pupil1",MiddleName = "Pupil1Middlename",BirthDate = DateTime.Today,DateOfAdmission = DateTime.Today,DateOfGraduation = DateTime.Today,Gender = "Male",
        //        PupilTeachers = new ObservableCollection<PupilTeacher>
        //        {
        //             new PupilTeacher()
        //             {
        //                 Teacher  = new Teacher(){FirstName = "Teacher1FirstName" }
        //             }
        //        },
        //        PupilParents = new ObservableCollection<PupilParent>
        //        {
        //            new PupilParent()
        //            {
        //                Parent = new Parent(){FirstName = "Parent1FIRSTNAME",LastName = "Parent1LASTNAME",BirthDate = DateTime.Today,MiddleName = "Name"}
        //            }
        //        },
        //        PupilGroups = new ObservableCollection<PupilGroup>
        //        {
        //            new PupilGroup()
        //            {
        //                Group = new Group(){GroupName = "MADGROUP"}
        //            }
        //        }
        //    };
        //    _db.Pupils.Add(pupil);
        //    _db.SaveChanges();
        //}
        DataContext = new PupilViewModel();
    }

READ ALSO
Взятие элемента из txt файла и его удаление. js

Взятие элемента из txt файла и его удаление. js

Нужно сделать так чтобы функция в js брала рандомно какое-то из имён в перечне, который находится уже изначально в текстовом файлеИ после того...

201
Проверка на наличие поля

Проверка на наличие поля

Мне приходят данные и как проверить если есть в них поле friendslist или нет?

393
Получение ответа на запрос JS

Получение ответа на запрос JS

Отправляю на nodejs запрос ( отправка формы ) , в ответ я получаю обычный HTML

363
XHR, $.ajax, как прервать success callback?

XHR, $.ajax, как прервать success callback?

Есть такая страничка со вкладками, открываешь каждую - она грузится секунд за 10, причем сам запрос может отработать довольно быстро, а вот...

304