I have a treeview control, and it's child node is mapped to element in a list, when the element in the list state changes, i need to update the corresponding treeview node, also, when user select a treenode, i can map to the element in the list, what's the best way to record the mapping?
If it's the standard WinForms TreeView you can use the Tag property on each node to store a reference to the corresponding list item.
If you are also using a ListView, each ListViewItem also has a Tag property that can be used to reference the corresponding treenode.
Using the Tag property of both TreeNodes and ListVIewItems allows you to easily implement a 2 way synchronization between them.
These Tag properties are of type object, so you can actually store anything you need in them. In your case, when the user edits a ListViewItem, you first get the Tag property, cast it to a TreeNode object and update the state of the TreeNode as required.
The same process in reverse applies when a user edits a TreeNode item.
[Update]
In user interfaces a Tree control and List control seem to go hand in hand on many screens. However in Windows Forms the TreeView and ListView (or List) are completely separate controls that don't necessarily need to be used together at all. Therefore there is no built in way to have these controls synchronize with each another. The Tag property and/or events are the most most common approaches to synchronisation between these controls.
I don't remember if this worked specifically with the TreeView control in Winforms, but http://updatecontrols.net/ is a sweet data binding setup that makes the updates happen super fast and in a really smooth way. You should take a peak.