Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 23:31   #1
r1ga
Новичок
Джуниор
 
Регистрация: 08.04.2012
Сообщений: 2
Вопрос TreeView-загрузка данных

Добрый вечер!
Пишу приложение-"Редактор Реестра".Пишу на WPF(c#).Возникла пока что непреодолимая проблема.Каталоги реестра имеют большой размер и многоуровневую вложенность. К примеру один из них содержит в себе 7000 вложений) Использую следующий код для заполнения TreeView этими каталогами
public MainWindow()
{
reg[0] = Registry.CurrentUser;
reg[1] = Registry.ClassesRoot;
reg[2] = Registry.LocalMachine;
reg[3] = Registry.Users;
reg[4] = Registry.CurrentConfig;
InitializeComponent();
for (int j = 0; j < reg.Length; j++)
{
TreeViewItem treeNode = new TreeViewItem();
treeNode.Header = reg[j].Name;
treeView1.Items.Add(treeNode);
Rec(treeNode, reg[j]);
}
public void Rec(TreeViewItem treeNode, RegistryKey rk)
{

string[] lst = rk.GetSubKeyNames();
for (int i = 0; i < Math.Min(lst.Length,15); i++)
{
TreeViewItem tvi = new TreeViewItem();
tvi.Header = lst[i];
treeNode.Items.Add(tvi);
try
{
Rec(tvi, rk.OpenSubKey(lst[i]));
}
catch
{
}
}
}
Как видно, я поставил пока ограничение на количество вложений-15.Но даже так заполнение проходит медленно. Поскажите пожалуйста, как можно реализовать полную прогрузку и с минимальным временем.Заранее спасибо
r1ga вне форума Ответить с цитированием
Старый 09.04.2012, 19:25   #2
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Грузи реестр по веточкам, по мере необходимости. Вот рабочий набросок, сорри за безобразный код.

MainWindow.xaml
Код:
<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:src="clr-namespace:WpfApplication3"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView ItemsSource="{Binding Source={x:Static src:Provider.getInstance}, Path=getRootKey}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding childrens}">
                    <Label Content="{Binding Path=name}"></Label>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>       
    </Grid>
</Window>

MainWindow.xaml.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;

namespace WpfApplication3
{
  /// <summary>
  /// Interaction logic for MainWindow.xaml
  /// </summary>
  /// 

  public class Key
  {
    public string name
    {
      get
      {
        return key.Name;
      }
    }
    public RegistryKey key { get; set; }
    public List<Key> childrens
    {
      get
      {

        List<Key> keylist = new List<Key>();
        foreach (var keyname in key.GetSubKeyNames())
        {
          Console.WriteLine(keyname);
          keylist.Add(new Key(key.OpenSubKey(keyname)));
        }
        
        return keylist;
      }
    
    }
    public Key(RegistryKey k)
    {
      key = k;
    }
    public Key()
    {}
  }

  public class Provider
  {
    private static Provider instance;
    public static Provider getInstance
    {
      get
      {
        if (instance == null)
          instance = new Provider();
        return instance;
      }
    }
    public List<Key> getRootKey
    {
      get
      {
        RegistryKey rootkey = Registry.CurrentUser;
        return new List<Key>() { new Key(rootkey) };
      }
    }
  }

  public partial class MainWindow : Window
  {
    public MainWindow()
    {

      InitializeComponent();
    }
  }
}
Вложения
Тип файла: zip WpfApplication3.zip (52.9 Кб, 47 просмотров)

Последний раз редактировалось the_deer_one; 09.04.2012 в 19:28.
the_deer_one вне форума Ответить с цитированием
Старый 09.04.2012, 21:08   #3
r1ga
Новичок
Джуниор
 
Регистрация: 08.04.2012
Сообщений: 2
По умолчанию

Спасибо)буду разбираться)
r1ga вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DB Treeview отображение данных SolidSnake БД в Delphi 2 21.03.2012 08:55
внесение данных из базы в treeview chircov090993 БД в Delphi 2 21.02.2012 05:50
Загрузка данных из БД в TreeView ahvahsky2008 Общие вопросы .NET 1 08.01.2012 19:27
загрузка в treeview Vlad123987 Общие вопросы Delphi 1 31.01.2011 11:18
Сохранение и загрузка узлов TreeView из базы данных Ko$tello Компоненты Delphi 1 14.11.2006 17:15