8

'da özellik değiştiğinde bildirimde bulunun Gözlemlenebilir koleksiyonu DataGrid'e bağlamaya çalışıyorum, herhangi bir satırın datagrid'de düzenlendiğini bildirmek istiyorum. Kodum, kayıt eklendiğinde veya kaldırıldığında değil, ancak kayıt düzenlendiğinde not almıyorken, not almak için iyi çalışıyor. Lütfen MVVM'de gözlemlenebilir koleksiyonu kullanarak doğru bağlantı yöntemi olup olmadığını ve bir şeylerin eksik olup olmadığını bana bildirin. Şimdiden teşekkürler. Gözlemlenebilir Koleksiyon MVVM

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; } 
} 

ve xaml

bir kayıt eklenir veya kaldırılır ancak bir kayıt düzenlendiğinde değildir zaman bir kullanıcı arayüzünü bildirecektir

<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> 

cevap

7

bir ObservableCollection olup. Değiştiğini bildirmek için değiştirilmiş olan nesneye kalmış.

Sizin durumunuzda, bir satır değiştirildiğinde, değiştirilen nesnenin türü studentModel'dur. Eğer bu nesne değiştirildiğinde UI bildirim almak istiyorsanız
nedenle, örneğin

.. çok studentModel üzerinde implement INotifyPropertyChanged gerek

public class studentModel : INotifyPropertyChanged 
    .....