Скажите, что у меня есть двоичное дерево, где корень структуры данных является просто древовидным узлом. Для каждого узла дети доступны через Children
свойство. Вот то, что я попробовал. TreeRoot
свойство наследованного контекста данных, но это - единственный узел (не набор).
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="TreeNodeTemplate" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView ItemsSource="{Binding TreeRoot}" ItemTemplate="{StaticResource TreeNodeTemplate}" />
</Grid>
это должно сделать это
любой размер шахматной доски вы хотите (просто пройти по ширине и высоте, как w, h); также у меня есть жестко закодированная высота/ширина ячейки до 1, хотя, конечно, это также может быть параметризовано так, что произвольное значение передается в:
>>> import numpy as NP
>>> def build_checkerboard(w, h) :
re = NP.r_[ w*[0,1] ] # even-numbered rows
ro = NP.r_[ w*[1,0] ] # odd-numbered rows
return NP.row_stack(h*(re, ro))
>>> checkerboard = build_checkerboard(5, 5)
>>> checkerboard
Out[3]: array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
с этим массивом 2D, это просто, чтобы визуализировать изображение шахматной доски, как так:
>>> import matplotlib.pyplot as PLT
>>> fig, ax = PLT.subplots()
>>> ax.imshow(checkerboard, cmap=PLT.cm.gray, interpolation='nearest')
>>> PLT.show()
-121--2111406- Как сказал Ремус, если вы используете модель полного восстановления, то вещи сложны. Но даже при простой модели восстановления необходимо помнить, что CHECKPOINT вызывает сборщик мусора (GC), но это не гарантирует, что GC удалит все файлы в одном проходе. GC в настоящее время имеет ограничение на количество операций, которые он может выполнять в одном вызове. Кроме того, файлы удаляются с FILE_DELETE_ON_CLOSE опцией, поэтому при наличии открытых дескрипторов файла они будут отображаться, даже если GC, возможно, уже удалил его. Такие открытые дескрипторы могут храниться антивирусными программами или другими драйверами фильтра файловой системы.
Наконец, если у вас не будет места на диске, я бы не стал беспокоиться о устаревших файлах - они в конечном итоге будут удалены как часть автоматических контрольных точек базы данных. Я считаю (хотя полагают, что является ключевым словом здесь), что даже если это может иметь медленное «время запуска», GC будет идти в ногу с физическим удалением файлов, если вы продолжаете тест в течение более длительного периода времени (минут?).
Если вы заботитесь о производительности, сохранение контейнеров файлового потока на системном диске может быть не такой уж хорошей идеей. См. здесь для получения подсказок производительности файлового потока.
-121--3690503-Я думаю, что ваша проблема заключается в том, что ваш иерархический шаблон данных применяется только к корневому узлу, поэтому вы никогда не видите ничего за нижестоящими элементами корня. Попробуйте сделать следующее:
<UserControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type TreeNode}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView ItemsSource="{Binding TreeRoot}"/>
</Grid>
Где TreeNode
является именем класса узлов дерева.
Как сказал Aviad, если вы используете DataType = «{x: Type Treenode}»
, то дерево автоматически использовал этот шаблон для любого объекта этого типа.
Если у вас есть несколько типов в своей иерархии, вы можете указать несколько иерархическихdateMplates каждый с типом данных. Это позволило бы сделать TreeView обрабатывать каждый тип по-разному.
<HierarchicalDataTemplate DataType="{x:Type TreeNode}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type TreeLeaf}">
<TextBlock Text="{Binding Message}" Background="Red" />
</HierarchicalDataTemplate>
У меня возникла эта проблема, и я пришел к выводу, что я не могу привязать не-коллекцию к древовидной структуре как способ указать корневой узел. Итак, я сделал быстрое изменение в моем ModelView и сделал свойство, представляющее корневой узел, коллекцией из 1 элемента.
public class ContainerViewModel
{
public ObservableCollection<TreeNodeViewModel> RootNodes { get; private set; }
public ContainerViewModel()
{
// Create a single node in the collection of root nodes
RootNodes = new ObservableCollection<TreeNodeViewModel>();
RootNodes.Add(new TreeNodeViewModel());
}
}
public class TreeNodeViewModel
{
public ObservableCollection<TreeNodeViewModel> Children { get; set; }
}
Я использовал ObservableCollection <> выше, но, возможно, имеет смысл использовать что-то более дешевое, например List <>, поскольку вы не ожидаете, что коллекция изменится (по крайней мере, в вашем сценарии).