有很多這種類型在這裏SO的問題,但都回答了,所以我決定創建一個快捷新的。標題是不言自明的,所以這是問題。 TreeView控件:展開/摺疊與HierarchicalDataTemplate
<TreeView>
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.Resources>
</TreeView>
HierarchicalDataTemplate:
var labelFactory = new FrameworkElementFactory(typeof(TextBlock));
var template = new HierarchicalDataTemplate(typeof(Node)) { ItemsSource = new Binding("Children") };
labelFactory.SetBinding(TextBlock.TextProperty, new Binding("Text"));
template.VisualTree = labelFactory;
treeView.ItemTemplate = template;
我型我結合:
var hierarchy = Helpers.GetHierarchy();
var rootNode = new Node();
rootNode.Children.Add(hierarchy);
GVSObjectStructureTreeView.ItemsSource = rootNode.Children;
:需要適當的顯示層次的
public class Node
{
public List<Node> Children { get; set; }
public Node Parent { get; set; }
public bool IsSelected { get; set; }
public bool IsExpanded { get; set; }
}
實際結合,空白根
有需要t o選擇/編程展開具體項目,但是當我做
var itemToSelect = FindTreeViewItem(treeView.ItemsSource as List<Node>, elementId);
itemToSelect.IsSelected = true;
沒有任何反應。相同的擴展。我想這個問題是有約束力的,但無法弄清楚。預先感謝您的幫助。
我想你會希望使用['的ObservableCollection'](http://msdn.microsoft.com/en-us/library/ms668604.aspx)或一些其他集合執行'INotifyCollectionChanged',否則集合改變將不會被反射。當然,如果孩子是不可改變的,那不是問題。 –
2012-04-23 14:26:48
更改列表到的ObservableCollection。仍然沒有運氣,選擇不起作用。 –
Jaded
2012-04-23 14:40:57
我從來沒有聲稱它會,它只是涉及收集的變化,你已經有了項目,所以你顯然沒有綁定後更改的集合。 – 2012-04-23 14:44:21