One 'obvious' problem I can see in your code is the line in which you assign the list to the tree - here you can have only one list at any time unless you add entries (instead of just assigning them) like so (see last couple of lines):
private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
DataGridRow row = sender as DataGridRow;
if (row != null)
{
var item = row.DataContext as Processes;
if (item != null)
{
int id = item.ID;
var subModules = new List<ITreeNode>();
var subThreads = new List<ITreeNode>();
for (int i = 0; i <= 3; i++)
{
subThreads.Add(new SubThread { Name = "subthread" + i });
}
var nodes = new List<ITreeNode>
{
new Thread { Name = "Thread ", ChildNodes = subThreads },
new Module { Name = "Module ", ChildNodes = subModules }
};
var runprocesses = new List<RunProcesses>();
Process myProcess = Process.GetProcessById(id);
ProcessModule myProcessModule;
ProcessModuleCollection myProcessModuleCollection = myProcess.Modules;
for (int i = 0; i < myProcessModuleCollection.Count; i++)
{
myProcessModule = myProcessModuleCollection[i];
string s = myProcessModule.FileName;
if (i == 1)
{
runprocesses.Add(new RunProcesses { Name = myProcessModule.FileName, ChildNodes = nodes });
}
subModules.Add(new SubModule { Name = s });
}
if (TreeView.ItemsSource != null)
TreeView.ItemsSource = runprocesses;
else
{
var root = TreeView.ItemsSource as List<RunProcesses>;
if (root != null) {
foreach (item in runprocesses)
{
root.Add(item);
}
}
}
}
}
Does this solve your problem? If not please specifiy your problem in more detail. set a breakpoint in your code and debug its behavior. Where do you get within your code with the debugger when you double click an entry for the 2nd time?