Q:

Again, ObservableCollection doesnt Update item

Thats my first project using MVVM , MVVM light.
I have a listbox, that gets refreshed from the PersonList Observable collection, adding and removing refresh it normal. the problem is when editing an item.
I looked for all the solutions for this problem, nothing worked, which make me think that I missed something. 
so here is the code : 
 public class AdminViewModel : ApplicationPartBaseViewModel
{
   private ObservableCollection<Person> personList;

   public AdminViewModel()
    {

       this.context = new Entities();
       this.SavePersonCommand = new RelayCommand(() => this.SavePerson ());

       this.PersonList = new ObservableCollection<Peson>(context.Person.OrderBy(o => o.PersonName).ToList());

     }

      public ObservableCollection<Person> PersonList
    {
        get
        {
             return personList;
        }

        set
        {
            this.personList = value;
            RaisePropertyChanged("PersonList");
        }
    }

     private void SavePerson()
    {
      //Add and update code here
       this.context.SaveChanges();
       RaisePropertyChanged("PersonList");

    }

}

Person Class is Autogenerated template from the DataModel edmx
 //------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

public partial class Person 
{
    #region Primitive Properties

    public virtual int PersonId
    {
        get;
        set;
    }

    public virtual string PersonName
    {
        get;
        set;
    }

    public virtual Nullable<int> PersonAge
    {
        get;
        set;
    }

    #endregion
    #region Navigation Properties

    public virtual ICollection<Humans> Humans
    {
        get
        {
            if (_human == null)
            {
                var newCollection = new FixupCollection<Human>();
                newCollection.CollectionChanged += FixupHuman;
                _human = newCollection;
            }
            return _human;
        }
        set
        {
            if (!ReferenceEquals(_human, value))
            {
                var previousValue = _human as FixupCollection<Human>;
                if (previousValue != null)
                {
                    previousValue.CollectionChanged -= FixupHuman;
                }
                _human = value;
                var newValue = value as FixupCollection<Human>;
                if (newValue != null)
                {
                    newValue.CollectionChanged += FixupAssets;
                }
            }
        }
    }
    private ICollection<Human> _human;

    #endregion
    #region Association Fixup

    private void FixupHuman(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.NewItems != null)
        {
            foreach (Human item in e.NewItems)
            {
                if (!item.Person.Contains(this))
                {
                    item.Person.Add(this);
                }
            }
        }

        if (e.OldItems != null)
        {
            foreach (Human item in e.OldItems)
            {
                if (item.Person.Contains(this))
                {
                    item.Person.Remove(this);
                }
            }
        }
    }

    #endregion
}

I thought that MVVM light update the item when I call RaisePropertyChanged. 
I am so confused. 
Thanks in advance.

A:

First option is try to get your auto-generated class to implement INPC if you can. Have a look at Fody.PropertyChanged
If that's not possible, since it does have it's properties as "virtual", we can over-ride them in a derived class such as
public class ObservablePerson : Person, INotifyPropertyChanged {
  public override int PersonId {
    get {
      return base.PersonId;
    }
    set {
      base.PersonId = value;
      OnPropertyChanged();
    }
  }

  public override string PersonName {
    get {
      return base.PersonName;
    }
    set {
      base.PersonName = value;
      OnPropertyChanged();
    }
  }

  public override int? PersonAge {
    get {
      return base.PersonAge;
    }
    set {
      base.PersonAge = value;
      OnPropertyChanged();
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  [NotifyPropertyChangedInvocator]
  protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
      handler(this, new PropertyChangedEventArgs(propertyName));
  }
}

Now in your AdminViewModel work with objects of type ObservablePerson than Person

