A: 

Needs more code. How do you bind? What type is ObservableCollection of? Are you sure you are notyfing in class that is value of ObservableColletion?

Edit: Also change title of your question. This is little ambiguous and not really problem of your question.

Euphoric
The Chart is a cutom WPF control.
Amir Rezaei
The type of ObservableCollection is ObservableCollection<WorkModel>. WorkModel is the Model.
Amir Rezaei
A: 

Have you tried something like this...

private IEnumerable<DataPoint> _DataPoints;
public IEnumerable<DataPoint> DataPoints
{
    get
    {
        return _DataPoints;
    }

    set
    {
        if (_DataPoints != value)
        {
            _DataPoints = value;
            this.OnPropertyChanged("DataPoints");
        }
    }
}

Then whenever you modify ANY point within the DataPoints collection, you raise a property change event for the entire DataPoints set

    /// <summary>
    /// Raised when a property on this object has a new value.
    /// </summary>
    public event PropertyChangedEventHandler PropertyChanged;

    /// <summary>
    /// Raises this object's PropertyChanged event.
    /// </summary>
    /// <param name="propertyName">The property that has a new value.</param>
    protected virtual void OnPropertyChanged(string propertyName)
    {
        //this.VerifyPropertyName(propertyName);

        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }

EDIT:
Try changing the resource type from StaticResource to DynamicResource...
http://msdn.microsoft.com/en-us/library/ms750613.aspx#staticdynamic
The resource could be being loaded with the page/window and never updated. That would explain the lack of event communication

TerrorAustralis
There is a difference between collection manipulation and changing collection data. Rising this.OnPropertyChanged("DataPoints") won't work when data is added/removed from collection.
Amir Rezaei
This is true, but you just raise the same event when you add/remove just as you have done in your example
TerrorAustralis
I don't raise anything when I use ObservableCollection. Please check updated question.
Amir Rezaei
Correct. this is because ObservableCollection implements its own change events when you do. But if you were not using an ObservableCollection, but an IEnumerable (or other collection) such as in my example, you would have to raise the property changed event manually when you add/remove from the collection
TerrorAustralis
I'll try with Dynamic.
Amir Rezaei
That isn't the problem, as I read the documentation.
Amir Rezaei
A: 

You've got this:

WorkModels="{Binding Source={StaticResource ListWorkViewModel}, Path=WorkModels}"

Why are you binding to a static resource? how is that resource defined? Is it in the XAML itself? Are you sure you're actually updating the same instance of the model that the control is bound to?

OJ
Please check updated question for datasource.The datasource instance is checked using a simple property (none collection type) that propagates to the Chart control.
Amir Rezaei
A: 

Thank you for answers. I found the solution to the problem here. http://msdn.microsoft.com/en-us/library/aa970563.aspx

For a dependency property in general, the implementation pattern that you follow is that you define a CLR property wrapper, where that property is backed by a DependencyProperty identifier rather than a field or other construct. You follow this same pattern when you implement a collection-type property. However, a collection-type property introduces some complexity to the pattern whenever the type that is contained within the collection is itself a DependencyObject or Freezable derived class.

Amir Rezaei