Наблюдаемая коллекция Уведомлять об изменении свойства в MVVM

Я пытаюсь привязать наблюдаемую коллекцию к DataGrid, я хочу уведомлять, когда какая-либо строка редактируется в datagrid. Мой код отлично работает для уведомления о добавлении или удалении записи, но не уведомляет, когда запись редактируется. Пожалуйста, дайте мне знать, правильный ли это способ привязки с использованием наблюдаемой коллекции в 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; }
}

И xaml есть

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

person Nithin Jadhav    schedule 18.02.2013    source источник


Ответы (1)


ObservableCollection будет уведомлять пользовательский интерфейс, когда запись добавляется или удаляется, но не, когда запись редактируется. Объект, который был изменен, должен уведомить об этом.

В вашем случае, когда изменяется строка, изменяется тип объекта studentModel.
Поэтому, если вы хотите, чтобы пользовательский интерфейс уведомлялся об изменении этого объекта, вам необходимо реализовать INotifyPropertyChanged на studentModel тоже..

e.g.

 public class studentModel : INotifyPropertyChanged
   .....
person Blachshma    schedule 18.02.2013