private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            //Check if it is a leaf first and not an intermediary node
            if (typeof(ViewerTreeItemDescriptor) == e.NewValue.GetType())
            {
                _selectedItem = (ViewerTreeItemDescriptor)e.NewValue;

                DrawSelectedItem();
            }
        }
        private void LoadTreeItemsWoker_DoWork(object sender, DoWorkEventArgs e)
        {
            _treeItemsList = new List <ViewerTreeItemDescriptor>();

            for (int nModIndex = 0; nModIndex < App.I.ModsPrefix.Count; nModIndex++)
            {
                for (int nTableIndex = 0; nTableIndex < (int)EDBTable.eTotal; nTableIndex++)
                {
                    EDBTable eDBTable = (EDBTable)nTableIndex;

                    string strTableNamePrefix = App.I.ModsPrefix[nModIndex];
                    string strTableNameSufix  = DBTableAttributtesFetcher.GetNameSufix(eDBTable);

                    string        strTableName   = string.Format("{0}_{1}", strTableNamePrefix, strTableNameSufix);
                    List <string> strColumnsList = DBTableAttributtesFetcher.GetTreeViewDecriptiveColumnsNames(eDBTable);

                    //Get items from mem DB
                    List <object[]> listColumnsValuesTable = App.DB.GetAllTableDataOfSpecificColumnsFromMemory(strTableName, strColumnsList);
                    if (listColumnsValuesTable.Count > 0)
                    {
                        //Now check if the collection already have the type
                        int nByTypeTypeIndex = GetTier1NodeIndex(ByTypeTreeData, strTableNameSufix);
                        //Now check if the Tier1 collection already have the mod
                        int nByTypeModIndex = GetTier2NodeIndex(ByTypeTreeData[nByTypeTypeIndex].Tier2, strTableNamePrefix);
                        //Now check if the collection already have the mod
                        int nByModModIndex = GetTier1NodeIndex(ByModTreeData, strTableNamePrefix);
                        //Now check if the Tier1 collection already have the type
                        int nByModTypeIndex = GetTier2NodeIndex(ByModTreeData[nByModModIndex].Tier2, strTableNameSufix);
                        //Now for each item we will create a new ViewerTreeItemDescriptor object and add it to the trees
                        listColumnsValuesTable.ForEach(item =>
                        {
                            int nByTypeItemIndex = ByTypeTreeData[nByTypeTypeIndex].Tier2[nByTypeModIndex].Items.Count;
                            int nByModItemIndex  = ByModTreeData[nByModModIndex].Tier2[nByModTypeIndex].Items.Count;

                            int[] nTreeIndexByType = new int[3] {
                                nByTypeTypeIndex, nByTypeModIndex, nByTypeItemIndex
                            };
                            int[] nTreeIndexByMod = new int[3] {
                                nByModModIndex, nByModTypeIndex, nByModItemIndex
                            };
                            ViewerTreeItemDescriptor newItem = new ViewerTreeItemDescriptor(item, eDBTable, nModIndex, nTreeIndexByType, nTreeIndexByMod, strTableName);
                            _treeItemsList.Add(newItem);
                            ByTypeTreeData[nByTypeTypeIndex].Tier2[nByTypeModIndex].Items.Add(newItem);
                            ByModTreeData[nByModModIndex].Tier2[nByModTypeIndex].Items.Add(newItem);
                        });
                    }
                }
            }
        }
        private void TabControlViewer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            _eTreeMode = (ETreeMode)TabControlViewer.SelectedIndex;

            // Check if we need to redraw the viewer data renderer
            ViewerTreeItemDescriptor selectedItem = null;

            switch (_eTreeMode)
            {
            case ETreeMode.eByMods:
                selectedItem = (ViewerTreeItemDescriptor)TreeViewViewerMods.SelectedItem;
                break;

            case ETreeMode.eByTypes:
                selectedItem = (ViewerTreeItemDescriptor)TreeViewViewerTypes.SelectedItem;
                break;
            }
            if (selectedItem != null && _selectedItem != selectedItem)
            {
                _selectedItem = selectedItem;
                DrawSelectedItem();
            }
        }