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.
Be wary of them, and try to use inherited attached properties instead of relying on Relative Source in Data Templates.
Create a collection with mixed viewmodel types–your original collection, and one that represents the “group”.
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.
Scrollbar performance is often a big problem in larger WPF apps because of problems that seem trivial for small collections, but suddenly blow up with larger data sets.
Also, it can be difficult in WPF to know exactly when the system is finished with an object.
If your windows/controls or your List Box Item/List View Items in a List Box/List View are coming up more slowly than you would like, it’s probably a combination of too much Resource Dictionary construction and/or Dynamic Resources. NET 4.0.) Collapse Resource Dictionaries as much as you can, and try to ensure that the contents of these dictionaries is only loaded once.
Instead, this is meant to be a slightly more practical guide to squeezing performance out of WPF in ways that are probably more likely affecting you.
and its subclasses List Box and List View exacerbate performance problems because these controls are highly dynamic (resolution happens “late”), involve WPF collections (which are slow), and have difficult and unpredictable lifetimes for their child controls.
It’s painful, but usually necessary in order to prevent view models from taking references to views.
If your application displays data from a network, you’re probably using background threads to accomplish the task (which is good).