У меня есть список, представляющий содержимое директории. Я хочу разрешить сброс только на те элементы, которые представляют собой сами каталоги. Я пробовал два подхода:
Сначала я установил источник элементов списка для составного набора всего содержимого каталога и попытался перебрать их с помощью:
foreach (ListBoxItem lbItem in directoryExplorer.Items)
{
MessageBox.Show(lbItem.DataContext.GetType().ToString());
}
Окно сообщения содержит «Directory» или «UserFile» для каждого элемента. Я надеялся получить доступ к элементам, проверить, что они представляют, и установить при необходимости AllowDrop.
Мой второй подход заключался в добавлении отдельных элементов примерно так:
ListBoxItem nxt;
foreach (Directory d in dir.childdirs)
{
MessageBox.Show(d.name);
nxt = new ListBoxItem();
nxt.DataContext = d;
nxt.AllowDrop = true;
nxt.Name = d.name;
directoryExplorer.Items.Add(nxt);
}
foreach (UserFile f in dir.childfiles)
{
MessageBox.Show(f.name);
nxt = new ListBoxItem();
nxt.AllowDrop = false;
nxt.DataContext = f;
nxt.Name = f.name;
directoryExplorer.Items.Add(nxt);
}
но потом он просто появляется пустым.