У меня есть datagrid, который содержит 3 столбца (столбец текстового поля, столбец со списком, столбец флажка), я хотел бы запустить событие , когда в столбце со списком будет выбрано значение, которое будет измените значение столбца флажка соответственно.Связывание данных, событие с измененным свойством
(я не жду его работать так, как код написан, я просто не знаю, как это сделать ..)
, например, в этом коде, когда оценка ниже, чем 90 лет, выбранный в столбце со списком (который привязан к свойству Grade
), мне нужно, чтобы значение столбца флажка (которое привязано к свойству GoodStudent
) изменилось на false
, а когда оно превысило 90, изменилось на true
.
если возможно без дополнительных кнопок.
Спасибо.
класс ViewModel:
public class Student : INotifyPropertyChanged
{
public ObservableCollection<int> Grades { get; set; }
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
OnPropertyChanged(new PropertyChangedEventArgs("Name"));
}
}
private int _Grade;
public int Grade
{
get
{
return _Grade;
}
set
{
_Grade = value;
OnPropertyChanged(new PropertyChangedEventArgs("Grade"));
}
}
private bool _GoodStudent;
public bool GoodStudent
{
get
{
return _GoodStudent;
}
set
{
_GoodStudent = value;
OnPropertyChanged(new PropertyChangedEventArgs("GoodStudent"));
}
}
public Student(string name, int g)
{
Grades = new ObservableCollection<int> { 30, 40, 90, 100 };
this.Name = name;
this.Grade = g;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
}
class ViewModel
{
public ObservableCollection<Student> Students { get; set; }
public ViewModel()
{
Students = new ObservableCollection<Student>
{
new Student("Dan",80),
new Student("Micheal",90)
};
}
}
XAML:
<Grid>
<DataGrid ItemsSource="{Binding Students}" AutoGenerateColumns="False" Margin="69,50,47,66">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Names"/>
<DataGridComboBoxColumn SelectedValueBinding="{Binding Grade, UpdateSourceTrigger=PropertyChanged}" Header="Grades" Width="80">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Grades, Mode=TwoWay , UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridCheckBoxColumn Binding="{Binding GoodStudent, UpdateSourceTrigger=PropertyChanged}" Header="IsGood" />
</DataGrid.Columns>
</DataGrid>
</Grid>
Похоже, вы почти у его (хотя вы могли бы использовать DataTrigger вместо вычисленного собственности), если вы хотите сделать ваш флажок привязки правильно (используйте имя свойства) и установите «GoodStudent», когда оценка была изменена. Что нам не хватает? – BradleyDotNET
изменить 'OnPropertyChanged (новый PropertyChangedEventArgs (« Grade »));' in goodStudent to' OnPropertyChanged (новый PropertyChangedEventArgs («GoodStudent»)); ' – lokusking
спасибо за ваши комментарии, я изменил его сейчас, но все же он не меняет значение 'CheckBoxColumn', когда я вставляю в класс ComboBoxColumn класс выше 90, я хочу, чтобы значение CheckBoxColumn было настроено на' true' автоматически, когда оно было выше. –