Я работаю над приложением WPF, которое использует иерархическую таблицу. Я сделал пример проекта, который работает хорошо, но есть другая спецификация, которая должна быть предоставлена.
Я использовал следующий пример Microsoft для создания проекта: https://github.com/ariesy/WPFSamples/tree/master/TreeListView/cs
В примере, который у меня естьСейчас 3 столбца, но я должен сделать его динамически изменяемым во время выполнения. Это означает, что мне нужно удалить некоторые столбцы или добавить новые в пользовательских событиях. Как я могу решить эту проблему?
Я пробовал кое-что, но я все еще не настолько опытен в WPF и, к сожалению, мне пришлось отказаться, потому что это заняло у меня много времени, поэтому мне нужнонебольшая помощь - некоторые полезные ссылки, идеи и т. д.
Я загрузил мой пример проекта в github, потому что он слишком большой, чтобы делиться всем кодом здесь (ветвь treeListView): https://github.com/mystic997/UnityIocSample/tree/sample/treeListView
Следующие файлы в этом проекте важны для моего вопроса:
- UnityIoCWpfSample.UI.Views.TreeListViewTable. TreeListView.xaml
- UnityIoCWpfSample.UI.Views.TreeListViewTable. TreeListViewModel - этот класс
ViewModel
имеет свойство с именем MyTree
, которое связано с ContentControl в предыдущем xaml - UnityIoCWpfSample.UI.Views.TreeListViewTable.CustomControls. TreeListView
- UnityIoCWpfSample.UI.Views.TreeListViewTable.CustomControls. 1040 * ** 10View*
Я думаю, что мне нужно реорганизовать мой GridViewColumnCollection
, в котором есть ключ с именем gvcc
.
<GridViewColumnCollection x:Key="gvcc">
<GridViewColumn Header="Title"
CellTemplate="{StaticResource HierarchicColumn}"
Width="250" />
<GridViewColumn Header="Description"
DisplayMemberBinding="{Binding Text}"
Width="200" />
<GridViewColumn Header="IsEnabled"
Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center"
IsChecked="{Binding IsEnabled}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridViewColumnCollection>
И мне нужно хранить столбцы в моем TreeListViewItem
классе:
public class TreeListViewItem : TreeViewItem
{
public object Content { get; set; }
private int _level = -1;
public int Level
{
get
{
if (_level == -1)
{
TreeListViewItem parent = ItemsControlFromItemContainer(this) as TreeListViewItem;
_level = (parent != null) ? parent.Level + 1 : 0;
}
return _level;
}
}
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeListViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is TreeListViewItem;
}
}
Но если я сделаю это, мой первый столбец, имеющий иерархический шаблон, не может быть легко реализован.