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.
For views, you get the get a WPF notification that a viewmodel is about to go unused by a view.
Use Data Templates to change the appearance of your “group” objects. NET 4.0, Dynamic Resource access is still slower than Static Resource access.
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.
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.