Как выполнить асинхронную загрузку и привязку данных XML к TreeView? - PullRequest
1 голос
/ 30 января 2012

Я связываю XML-файл с WPF TreView, используя этот код:

XmlDocument XMLdoc = new XmlDocument();
try
{
     XMLdoc.Load(file);
     XmlDataProvider provider = new XmlDataProvider();
     provider.Document = XMLdoc;
     Binding binding = new Binding();
     binding.Source = provider;
     binding.XPath = "child::node()";
     xmlTree.SetBinding(TreeView.ItemsSourceProperty, binding);
}
catch (XmlException)
{
  MessageBox.Show("The XML file is invalid");
  return;
}

Я не могу сказать, что XML слишком большой, но для связывания и отображения данных XML в WPF TreeView требуется много времени, более 1 минуты.

Мой вопрос: Есть ли моменты, которые мы можем оптимизировать?

(ПРИМЕЧАНИЕ. Последняя идея - показать XML в приложении WPF.)

Ответы [ 2 ]

1 голос
/ 30 июля 2012

У меня была та же проблема, и я решил ее, задав для свойства TreeView «VirtualizingStackPanel.IsVirtualizing» значение «true».

1 голос
/ 30 января 2012

Не имея кода и XML-файла передо мной, я могу лишь перейти к тому, что здесь, и я вижу, что вы сначала загружаете в память довольно сложный и большой XML-файл, а затем привязываете графический интерфейс к это второе, все последовательно.

В какой-то момент вам придется платить пайперу за эти дорогостоящие и трудоемкие операции, но вы можете, по крайней мере, сделать свой GUI отзывчивым во время загрузки. Я бы исследовал использование BackgroundWorker для загрузки и, возможно, даже для привязки (это то место, где мне нужно было бы посмотреть больше, чтобы сказать наверняка).

Вот сообщение в блоге , в котором говорится о XMLDataProvider и Background работнике, хотя и в несколько ином контексте, чем у вас. В любом случае, это должно дать вам кое-что для работы. Основной темой здесь является то, что вы хотите выполнять дорогостоящие операции и выполнять их в фоновом режиме, не блокируя весь прогресс, чтобы, по крайней мере, ваш графический интерфейс мог реагировать на пользователя. Таким образом, вы можете настроить графический интерфейс пользователя на индикатор выполнения, значок мыши в виде песочных часов и т. Д., В то время как происходит дорогостоящая загрузка и привязка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...