Как я могу управлять ошибка:системе.окна.данные ошибка: 40 : bindingexpression путь ошибка: 'изменили реализацию' имущество не нашел на 'объект' "кур' ?
Привет,
Я изменил название своего вопроса, потому что не понимаю этой ошибки в привязке с представлением.Я знаю,как его читать, но не понимаю его причины и как мне изменить синтаксис для него в правильном решении.Это мой метод хранения значений:
модель представления:
public void SaveTeacher(object param) { using (DatabaseStudentsEntitiesLastStand db = new DatabaseStudentsEntitiesLastStand()) { RegisterTeacher t = new RegisterTeacher(); if (isChecked == true || t.CourseName != null) { t.CourseName = courseName; } t.SNTeacher = SNTeacher; t.UserName = _UserName; t.pwd = pwd; t.fullName = fullName; t.education = education; db.RegisterTeachers.Attach(t); try { db.SaveChanges(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
Это свойство isChecked:
private bool isChecked; public bool IsChecked { get { return IsChecked; } set { if (isChecked != value) { isChecked = value; NotifyOnPropertyChange("IsChecked"); } } } private DelegateCommand checkCommand; public DelegateCommand CheckCommand { get { if (checkCommand == null) checkCommand = new DelegateCommand(SaveTeacher, null); return checkCommand; } set { checkCommand = value; NotifyOnPropertyChange("CheckCommand"); } }
Это и есть привязка с видом:
<Button Content="Submit" Command="{Binding SaveCommand}" HorizontalAlignment="Left" Margin="517,98.4,0,0" Grid.Row="2" VerticalAlignment="Top" Width="110" Height="40"/> <Button Content="Cancel" HorizontalAlignment="Left" Margin="361,98.4,0,0" Grid.Row="2" VerticalAlignment="Top" Width="111" Height="40"/> <ListBox HorizontalAlignment="Left" Name="coursesList" Height="240" Margin="418,13.2,0,0" Grid.Row="1" VerticalAlignment="Top" Width="225" Grid.RowSpan="2" ItemsSource="{Binding Courses}" > <ListBox.ItemTemplate> <DataTemplate> <CheckBox x:Name="CheckBoxCourses" Click="CheckBoxCourses_Click" IsChecked="{Binding Path=IsChecked,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Command="{Binding CheckCommand,Mode=TwoWay}" Content="{Binding Path=courseName,Mode=TwoWay}" Margin="0"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Это проверенное событие:
private void CheckBoxCourses_Checked(object sender, RoutedEventArgs e) { var checkbox = sender as CheckBox; if(checkbox!=null) { checkbox.IsChecked =true; } }
Что я уже пробовал:
В этом и заключается вся ошибка:
System.Windows.Data Error: 40 : BindingExpression path error: 'IsSelected' property not found on 'object' ''Cours' (HashCode=44335814)'. BindingExpression:Path=IsSelected; DataItem='Cours' (HashCode=44335814); target element is 'CheckBox' (Name=''); target property is 'IsChecked' (type 'Nullable`1')
Я пробовал несколько решений с delegatecommand,selecteditem в списке и IsSelected property,свойства только для чтения,ничего не работает.Поскольку я перепробовал много подходов,я переместил свойство IsChecked из view-model в класс модели с именем "Cours" вместе с NotifyPropertyChanged(так что оно в основном выглядит так же,как и в моем примере,только оно находится в модели, а не в виртуальной машине).Может ли кто-нибудь сказать мне, в чем будет заключаться проблема, основанная на этой ошибке?Пожалуйста, сообщите мне, если вам понадобятся определенные строки кода.
Aydin Homay
Привет, пожалуйста, скопируйте также метод CheckBoxCourses_Click, чтобы увидеть, как вы обрабатываете это событие.
Daniel Andrei Popescu
Здравствуйте,спасибо за ваш ответ.Я уже это сделал.