I have a WPF application built using the MVVM pattern:

* My Models come from LINQ to SQL.
* I use the Repository Pattern to abstract away the DataContext.
* My ViewModels have a reference to a Model.
* Setting a property on the ViewModel causes that value to be written through to the Model.

As you can see, my data is stored in my Model, and changes are therefore tracked by my DataContext.

However, [in this question](https://stackoverflow.com/questions/196253/linq-to-sql-where-does-your-datacontext-live) I read:

> 
> The guidelines from the MSDN
>  documentation on the DataContext class
>  are what I would recommend following:
> 
> 
> In general, a DataContext instance is
>  designed to last for one "unit of
>  work" however your application defines
>  that term. A DataContext is
>  lightweight and is not expensive to
>  create. A typical LINQ to SQL
>  application creates DataContext
>  instances at method scope or as a
>  member of short-lived classes that
>  represent a logical set of related
>  database operations.
> 
> 
> 

How do you track your changes? In your DataContext? In your ViewModel? Elsewhere?