mvvm observablecollection inotifypropertychanged inotifycollectionchanged

Colección Observable Notificar cuando la propiedad cambió en MVVM



observablecollection inotifypropertychanged (1)

Un ObservableCollection notificará a la UI cuando se agrega o elimina un registro, pero no cuando se edita un registro. Depende del objeto que se ha cambiado notificar que ha cambiado.

En su caso, cuando se modifica una fila, el tipo de objeto que se cambia es studentModel .
Por lo tanto, si desea que la interfaz de usuario reciba una notificación cuando se cambie ese objeto, debe implementar INotifyPropertyChanged en studentModel también.

p.ej

public class studentModel : INotifyPropertyChanged .....

Estoy intentando vincular la colección observable a DataGrid, quiero notificar cuando se edita cualquier fila en la cuadrícula de datos. Mi código funciona bien para notifcar cuando se agrega o elimina el registro, pero no está notificando cuando se edita el registro. Por favor, avíseme si esta es la forma correcta de encuadernación usando la colección observable en MVVM y si me falta algo. Gracias por adelantado.

public class studentViewModel : INotifyPropertyChanged { #region constructor public studentViewModel() { _student = new studentModel(); myCollection = new ObservableCollection<studentModel>(); myCollection.Add(_student); myCollection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(myCollection_CollectionChanged); } void myCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { //throw new NotImplementedException(); System.Windows.MessageBox.Show(e.Action.ToString()); } #endregion #region properties studentModel _student; ObservableCollection<studentModel> _myCollection; public ObservableCollection<studentModel> myCollection { get { return _myCollection; } set { if (_myCollection != value) { _myCollection = value; raisePropertyChange("myCollection"); } } } public int rollNo { get { return _student.rollNo; } set { if (value != _student.rollNo) { _student.rollNo = value; raisePropertyChange("rollNo"); } } } public string firstName { get { return _student.firstName; } set { if (value != _student.firstName) { _student.firstName = value; raisePropertyChange("firstName"); } } } public string lastName { get { return _student.lastName; } set { if (value != _student.lastName) { _student.lastName = value; raisePropertyChange("lastName"); } } } #endregion #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; public void raisePropertyChange(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } } #endregion } public class studentModel { public int rollNo { get; set; } public string firstName { get; set; } public string lastName { get; set; } }

Y xaml es

<Window.Resources> <local:studentViewModel x:Key="StudentsDetails" /> </Window.Resources> <Grid DataContext="{StaticResource StudentsDetails}"> <DataGrid ItemsSource="{Binding Path=myCollection, Source={StaticResource StudentsDetails}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Name="studentsGrid" CanUserAddRows="True" AutoGenerateColumns="True"> </DataGrid> </Grid>