Ποιός είναι ο κώδικας (XAML, code-behind, viewmodel)? Υποψιάζομαι πάντως ότι δεν έχεις ξανασυναντήσει το Model-View-ViewModel pattern, τον πιο δημοφιλή τρόπο ανάπτυξης UI σε WPF και Silverlight.
Το data binding του WPF επιτρέπει να συνδέσεις τα properties ενός control με properties ενός οποιουδήποτε αντικειμένου, απλά δίνοντας το όνομα του target property. Σε αυτό βασίζεται το pattern Model-View-ViewModel για να αποσυνδέσει την αναπαράσταση δεδομένων (το View) από τα ίδια τα δεδομένα (ViewModel). Οι κλάσεις του ViewModel δεν χρειάζεται να υλοποιούν το παραμικρό, απλά να παρέχουν τα σωστά properties. Στην περίπτωση σου, οποιοδήποτε αντικείμενο με Name και Tag properties, μπορεί να χρησιμοποιηθεί από το TreeView.
Οι κλάσεις του ViewModel δεν έχουν και ΔΕΝ ΠΡΕΠΕΙ να έχουν καμμία σχέση με το UI. Το collapse, expand είνα δουλειά του UI, όχι των δεδομένων. Συνεπώς, είναι μεγάλο λάθος να προσπαθείς να κληρονομήσεις από οποιαδήποτε κλάση UI όπως η TreeNode.
Για να ελέγξεις το collapse από τον κώδικα, θα πρέπει να χρησιμοποιήσεις Data binding και να συνδέσεις το IsExpanded property με κάποιο boolean property στο ViewModel σου. Θα πρέπει επίσης να φροντίσεις το ViewModel σου να υλοποιεί το interface INotifyPropertyChange για να ειδοποιήσει το View ότι κάτι άλλαξε και να γίνει το αντίστοιχο refresh.
Σε κάθε περίπτωση, δεν θα πρέπει να αρχίσεις να αλλάζεις τον κώδικα που ήδη υπάρχει πριν καταλάβεις πως δουλεύει το MVVM και το WPF.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos