Привязка не работает в приложении WPF
Привет,
Недавно я перенес свой проект с одного компьютера на другой, и с тех пор начался ад.В настоящее время у меня есть проблема с моей привязкой,хотя в последней версии все работало правильно.Так что проблема в моем случае на данный момент-это мой combobox.Я использую MVVM, и у меня есть метод, который я передаю в DelegateCommand и, наконец, в само представление.Это мой метод:
public void CreateCrazy(object para) { var retur = new List<AvailableCours>(); using (AnotherDbEntities db = new AnotherDbEntities()) { try { var testing = Education; var query = (from data in db.AvailableCourses where data.education == Education select new { CourseName = data.courseName }).ToList().Select(c => new AvailableCours { courseName = c.CourseName }).ToList(); retur = query; } catch (Exception ex) { MessageBox.Show(ex.Message); } } Courses = new ObservableCollection<AvailableCours>(retur); }
В основном метод показывает все курсы, доступные для этой конкретной программы.У меня есть программы, перечисленные в combobox(так что привязка с combobox правильна), но у меня есть проблема, когда я нажимаю кнопку, и я хочу, чтобы мои курсы отображались.Теперь это привязка в представлении:
Смотреть.язык XAML.в CS
RegisterTeacherViewModel regTeacher; Object obj = new object(); public Register() { InitializeComponent(); regTeacher = new RegisterTeacherViewModel(); this.DataContext = regTeacher; cbxCourses.ItemsSource = regTeacher.GetByEducation(); //coursesList.ItemsSource = regTeacher.GetByEducation(); //regTeacher.CreateCrazy(ShowCourse); }
Смотреть.язык XAML
<ComboBox HorizontalAlignment="Left" x:Name="cbxCourses" SelectedItem="{Binding Education}" Margin="126,229.2,0,0" IsSynchronizedWithCurrentItem="True" Grid.Row="2" VerticalAlignment="Top" DisplayMemberPath="education" Width="228" Grid.RowSpan="2"/> <Button Content="Submit" Command="{Binding Path=SaveCommand,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" CommandParameter="{Binding ElementName=coursesList}" HorizontalAlignment="Left" Margin="517,98.4,0,0" Grid.Row="3" VerticalAlignment="Top" Width="110" Height="40"/> <Button Content="Cancel" HorizontalAlignment="Left" Margin="361,98.4,0,0" Grid.Row="3" VerticalAlignment="Top" Width="111" Height="40"/> <Button Content=">>" Name="ShowCourse" CommandParameter="{Binding ElementName=cbxCourses,Path=SelectedValue}" Command="{Binding MergeCommand,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="422,216.2,0,0" Grid.Row="2" VerticalAlignment="Top" Width="84" Height="33" Grid.RowSpan="2"/>
Здесь у меня есть привязка с combobox,где я привязываю значение education, а последняя кнопка-это кнопка с курсами.Когда я нажимаю кнопку,курсы должны отображаться,а вместо этого ничего нет.Я поставил точку останова,чтобы увидеть точную проблему ,и то, что я заметил, было то, что когда я заменяю data.education="ICT Engineering", я вижу, что курсы добавляются в список курсов.Когда у меня есть data.education=Образование,ничего не происходит.В чем же тогда проблема?Я дважды проверил значения,привязку,все, но, похоже, не могу найти проблему.Любой совет будет оценен по достоинству!
Это и есть "образовательная" ценность в том случае, если она актуальна:
public String education = string.Empty; public String Education { get { return education; } set { education = value; NotifyOnPropertyChange("Education"); } } private ObservableCollection<AvailableCours> _courses; public ObservableCollection<AvailableCours> Courses { get => _courses; set { _courses = value; NotifyOnPropertyChange(nameof(Courses)); } } public RegisterTeacherViewModel() { mergeCommand = new DelegateCommand(CreateCrazy); saveCommand = new DelegateCommand(SaveTeacher); Courses = new ObservableCollection<AvailableCours>(); }
Моя проблема заключается в том,что когда я отлаживаю и ставлю точку останова в строке кода,где появляется образование, оно ломается, не входя в представление, хотя оно должно было бы сломаться, когда я выбрал значение из выпадающего списка.Это мой метод воспитания:
public IEnumerable<AvailableCours> GetByEducation() { using (var context = new AttendanceStudentsEntities()) { var query = (from data in context.AvailableCourses select new { Education = data.education }).ToList().Select(c => new AvailableCours { education = c.Education }).ToList(); return query.ToList(); } }
Это привязка в представлении.xaml:
<ComboBox HorizontalAlignment="Left" x:Name="cbxCourses" SelectedItem="{Binding Education}" Margin="126,229.2,0,0" IsSynchronizedWithCurrentItem="True" Grid.Row="2" VerticalAlignment="Top" DisplayMemberPath="education" Width="228" Grid.RowSpan="2"/>
Вместе с DataContext в В посмотреть.язык XAML.в CS :
общественности частичного Класс Регистра : окна
{
RegTeacher RegisterTeacherViewModel ;
Object obj = новый объект();
государственный реестр()
{
метод InitializeComponent();
regTeacher = новый RegisterTeacherViewModel();
этот.DataContext = regTeacher;
cbxCourses.ItemsSource = regTeacher.GetByEducation();//здесь я получаю все программы из базы данных.
//список курсов.ItemsSource = regTeacher.GetByEducation();
//регтич.CreateCrazy(ShowCourse);
}
}
Что я уже пробовал:
Я пробовал с ElementName для того, чтобы связать элемент управления ListBox(там, где отображаются курсы)с кнопкой,updatesourcetrigger для привязки и я назначил свойство ItemsSource в ComboBox в представлении.язык XAML.КС.