Я пытаюсь заставить свой структурный вид группировать набор подобных объектов тем, каковы они. Для хранения вещей универсальными моя иерархия объектов могла быть похожей на это:
Прямо сейчас мой TreeView показывает эти объекты точно как объектная модель, но что я хотел бы сделать, вставка узел TreeView для каждого типа объекта так, чтобы он был бы похож на это:
Я видел в подобном вопросе здесь, что кто-то рекомендовал иметь два отдельных HierarchicalDataTemplates
таким образом, я создал один для 'Группы объектов № 1' уровень, который содержит TreeView со списком типов, но это действительно неуклюже, так как это - целый отдельный TreeView в некоторых узлах. Я также пытался использовать a CollectionViewSource
для отфильтровывания объектов в каждой категории но это не делает меня особая польза, так как я не могу выяснить, как отобразить их.
Я предполагаю, что мой вопрос сводится к этому: Как я делаю a HierarchicalDataTemplate
группа это - дети? Если бы кто-то мог бы указать на меня в правильном направлении, я ценил бы его много.
Я могу отправить некоторый код, если кто-либо хочет видеть, но я действительно просто пытаюсь выяснить, как сделать то, что я хочу так свой код, просто довольно прямой связанный с данными treeview прямо сейчас.
No. Боюсь, что нет.
Необходимо использовать динамический sql, чтобы использовать переменную для имени базы данных или столбца.
-121--4435061-Вы можете использовать этот тестовый код и сравнить результаты! Дио!
#include <vector>
#include <iostream>
#include <ctime>
using namespace std;;
struct AAA{
int n;
string str;
};
int main() {
const int BIG = 5000000;
vector <AAA> v;
for ( int i = 0; i < BIG; i++ ) {
AAA a = {i, "aaa"};
v.push_back( a );
}
clock_t now;
cout << "start" << endl;
int n = 0;
now = clock();
for(vector<AAA>::iterator it = v.begin(); it != v.end(); ++it) {
n += it->n;
}
cout << clock() - now << endl;
n = 0;
now = clock();
for(size_t i = 0; i < v.size(); ++i) {
n += v[i].n;
}
cout << clock() - now << endl;
getchar();
return n != 0;
}
-121--998075- Посмотрите на эту статью г-на Суми. Уверен, это вам поможет.
AFAIK, HierarchicalDataTemplate
не может сгруппировать свои дочерние элементы.
Представление должно просто отображать все, что оно получает, не копаясь в типах / группах объектов ... Почему бы вам не создать эти группы в своей объектной модели?
И представление просто получит что-то вроде:
public interface ITreeNode
{
string Title;
IList<ITreeNode> ChildNodes;
}
и отобразите его с помощью HierarchicalDataTemplate
.
Вы можете достичь этого эффекта, привязав ItemsSource
к вашему HierarchicalDataTempalate
с помощью IValueConverter
]. Этот конвертер просто выполняет следующие действия:
public class MyConverter : IValueConverter
{
public object Convert(object value, ...)
{
return
from item in (IEnumerable<MyItem>)value
group item by item.Type into g
select new { Type = g.Key, Items = g }
}
...
}
Теперь ваш HierarchcialDataTemplate
может иметь следующий вид:
<HierarchicalDataTemplate ItemsSource="{Binding SomePath, Converter={x:Static local:MyConverter}">
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding Items}"
TargetType="{x:Type local:MyItem}"
ItemTemplate="{StaticResource MyItemTemplate}">
<!-- may omit ItemTemplate in prior line to use implicit template -->
<TextBlock Text="{Binding Type}" /> <!-- Header for type -->
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<!-- header for "Object Group #1" -->
</HierarchicalDataTemplate>