It keeps the observed object (generally, your view model) from accidentally holding a strong reference to your view. Viewmodels tend to have a longer lifetime than views (consider a virtualized Items Control), so it’s possible that your view model will inadvertently gather references to views.
If your views or behaviors rely on events being raised from a viewmodel (as innocuous as INotify Property Changed. Use classes like Property Changed Event Manager or Collection Changed Event Manager, or (painfully) use the Weak Event Manager to create your own event manager for your custom events.
For example, if you have a Person View Model class with a property that you want to group by (let’s say Region), it is faster to create a mixed collection of My Group View Model and Person View Model objects, ordered correctly by group, with different Data Templates, than it is to bind to a grouped collection. And worse, once you start nesting Dynamic Resources (for example, a List View whose Style contains a Control Template that references objects through Dynamic Resources), you’re likely to run into situations where you leak controls.
This advice is practically impossible to follow, but do your best.
This may not always be a practical or desirable solution, but layout passes perform faster when widths and heights do not have to be recalculated.
They may also help stop a layout pass from rippling through an entire visual tree.
Open up your app in the debugger and play around, especially where there is slowness. Relative Source in Data Templates may also result in bindings that break initially, but then later resolve properly.
Use Data Templates to change the appearance of your “group” objects. NET 4.0, Dynamic Resource access is still slower than Static Resource access.
Finally, there are old UI/Win Forms problems (this, this, and this) that never really went away—they’re just less likely to happen.
Every time a binding error occurs, your app hangs for just a split second as it writes out errors to the trace log.
And always set specific widths on columns in a grid (be it a List View Grid View or any third-party control), because these tend to be very expensive, especially with larger data sets.
Grouping in WPF doesn’t perform terribly well, especially with List Views and Grid Views.