void AddItem_Click(object sender, RoutedEventArgs e)
        {
            MenuItemEx mi = sender as MenuItemEx;
            if (mi == null)
                return;

            TableDialog td = new TableDialog();
            td.ShowDialog();

            if (td.Result != MessageBoxResult.OK)
                return;

            string name = td.Name;
            _BindingT.SetTable(mi.Owner.Name, name);
            Modify = true;

            List<KeyValueData> kvList = new List<KeyValueData>();
            ImageTreeViewItem node = new ImageTreeViewItem();
            node.SelectedImage = new BitmapImage(new Uri("Resource/Image/file1.png", UriKind.Relative));
            node.UnselectedImage = new BitmapImage(new Uri("Resource/Image/file.png", UriKind.Relative));
            node.Text = name;
            node.TableName = name;
            node.Selected += TreeViewItem_Selected;
            mi.Owner.BindingItem.Items.Add(node);

            TreeViewItemContextMenu cm = new TreeViewItemContextMenu();
            cm.Name = name;
            cm.OwnerName = mi.Owner.Name;
            cm.BindingItem = node;
            cm.RootItem = mi.Owner.BindingItem;
            node.ContextMenu = cm;
            cm.AddItem.Click += new RoutedEventHandler(AddItem_Click);
            cm.DeleteItem.Click += new RoutedEventHandler(DeleteItem_Click);

            DataTable dt = new DataTable(name);
            dt.Columns.Add("Key", typeof(string));
            dt.Columns.Add("Type", typeof(string));
            dt.Columns.Add("Data", typeof(string));
            foreach (KeyValueData kvd in kvList)
            {
                dt.Rows.Add(kvd.Key, kvd.Type, kvd.Data);
            }

            TableData tab = new TableData();
            tab.Name = name;
            tab.DataSource = dt;
            tab.Item = kvList;
            node.Tag = tab;
        }
        private void DisplayTreeView(ImageTreeViewItem root, String name, List<String> items)
        {
            List<KeyValueData> kvList = new List<KeyValueData>();

            foreach (String key in items)
            {
                int value = BindingT.GetValue(name, key);
                if (BindingT.IsTable(value))
                {
                    ImageTreeViewItem node = new ImageTreeViewItem();
                    node.SelectedImage = new BitmapImage(new Uri("Resource/Image/file1.png", UriKind.Relative));
                    node.UnselectedImage = new BitmapImage(new Uri("Resource/Image/file.png", UriKind.Relative));
                    node.Text = key;
                    node.TableName = key;
                    node.Selected += TreeViewItem_Selected;
                    root.Items.Add(node);

                    TreeViewItemContextMenu cm = new TreeViewItemContextMenu();
                    cm.Name = key;
                    cm.OwnerName = name;
                    cm.BindingItem = node;
                    cm.RootItem = root;
                    node.ContextMenu = cm;
                    cm.AddItem.Click += new RoutedEventHandler(AddItem_Click);
                    cm.DeleteItem.Click += new RoutedEventHandler(DeleteItem_Click);

                    List<String> subItems = BindingT.GetTableKeys(key);
                    DisplayTreeView(node, key, subItems);
                    continue;
                }

                KeyValueData kvData = new KeyValueData();
                if (BindingT.IsBool(value))
                {
                    bool bv = BindingT.ToBool(value);
                    kvData.AttachToTfsValue(key, ValueType.Bool, bv.ToString());
                }
                else if (BindingT.IsByte(value))
                {
                    byte bv = BindingT.ToByte(value);
                    kvData.AttachToTfsValue(key, ValueType.Byte, bv.ToString());
                }
                else if (BindingT.IsDouble(value))
                {
                    double dv = BindingT.ToDouble(value);
                    kvData.AttachToTfsValue(key, ValueType.Double, dv.ToString());
                }
                else if (BindingT.IsFloat(value))
                {
                    float fv = BindingT.ToFloat(value);
                    kvData.AttachToTfsValue(key, ValueType.Float, fv.ToString());
                }
                else if (BindingT.IsInt32(value))
                {
                    int i32v = BindingT.ToInt32(value);
                    kvData.AttachToTfsValue(key, ValueType.Int32, i32v.ToString());
                }
                else if (BindingT.IsInt64(value))
                {
                    Int64 i64v = BindingT.ToInt64(value);
                    kvData.AttachToTfsValue(key, ValueType.Int64, i64v.ToString());
                }
                else if (BindingT.IsString(value))
                {
                    string sv = BindingT.ToString(value);
                    kvData.AttachToTfsValue(key, ValueType.String, sv);
                }

                kvList.Add(kvData);
            }

            DataTable dt = new DataTable(name);
            dt.Columns.Add("Key", typeof(string));
            dt.Columns.Add("Type", typeof(string));
            dt.Columns.Add("Data", typeof(string));
            foreach (KeyValueData kvd in kvList)
            {
                dt.Rows.Add(kvd.Key, kvd.Type, kvd.Data);
            }

            TableData tab = new TableData();
            tab.Name = name;
            tab.DataSource = dt;
            tab.Item = kvList;
            root.Tag = tab;
        }
        public void AttachToTinyFS(TinyFS tfs)
        {
            BindingT = tfs;

            ImageTreeViewItem rootItem = new ImageTreeViewItem();
            rootItem.SelectedImage = new BitmapImage(new Uri("Resource/Image/letter1.png", UriKind.Relative));
            rootItem.UnselectedImage = new BitmapImage(new Uri("Resource/Image/letter.png", UriKind.Relative));
            rootItem.Text = System.IO.Path.GetFileName(FileName);
            rootItem.Selected += TreeViewItem_Selected;
            rootItem.IsExpanded = true;
            SysTreeView.Items.Add(rootItem);
            ImageTreeViewItem.RootItem = rootItem;

            TreeViewItemContextMenu cm = new TreeViewItemContextMenu();
            cm.DeleteItem.IsEnabled = false;
            cm.BindingItem = rootItem;
            cm.AddItem.Click += new RoutedEventHandler(AddItem_Click);
            cm.DeleteItem.Click += new RoutedEventHandler(DeleteItem_Click);
            rootItem.ContextMenu = cm;

            List<String> items = tfs.GetTableKeys(null);
            DisplayTreeView(rootItem, null, items);
        }