[英]How bind an object to treeview from Xaml
我正在尝试通过XAML将对象绑定到treeviewcontrol WPF,而使treview为空。 当我通过treeview.items.add(GetNode())
此操作时。
我正在使用MVVM Framework(caliburn.Micro),我想在Xaml中执行此操作,如何在xaml中分配项源属性? 我尝试创建Node类的属性,并在属性中调用方法GetNode(),然后将该属性分配为树视图的itemssource,并将List更改为Observable集合。 仍然是相同的问题。
在执行treeview.items.Add(GetNode())
时工作Xaml,该操作返回一个Node,并且i
将Nodes集合分配给Hireachial模板。
<TreeView Name="treeview2"
Grid.RowSpan="2"
Grid.ColumnSpan="2"
ItemContainerStyle="{StaticResource StretchTreeViewItemStyle}" Width="300">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
<DockPanel LastChildFill="True">
<TextBlock Padding="15,0,30,0" Text="{Binding Path=numitems}" TextAlignment="Right"
DockPanel.Dock="Right"/>
<TextBlock Text="{Binding Path=Text}" DockPanel.Dock="Left" TextAlignment="Left" />
</DockPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
服务器端代码:
this.treeview2.Items.Add(GetNode());
GetNode递归地构建Node类型的列表。
public class Node
{
public string Text { get; set; }
public List<Node> Nodes { get; set; }
public ObservableCollection<Node> Nodes{get;set;} // with list and observable collection same results
public int numitems { get; set; }
}
除了看起来不错的HierarchicalDataTemplate
,还向TreeView的ItemsSource属性添加一个绑定:
public class ViewModel
{
private List<Node> _rootNodes;
public List<Node> RootNodes
{
get
{
return _rootNodes;
}
set
{
_rootNodes = value;
NotifyPropertyChange(() => RootNodes);
}
}
public ViewModel()
{
RootNodes = new List<Node>{new Node(){Text = "This is a Root Node}",
new Node(){Text = "This is the Second Root Node"}};
}
在XAML中:
<TreeView ItemsSource="{Binding RootNodes}"
.... />
编辑:删除执行this.Treeview....
的调用。 尽量减少引用UI元素的代码量。 您可以使用绑定完成所有操作,而无需在代码中操作UI元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.