MVVM使用xml作为treeview数据源
前言
使用xml来作为tree view数据源,实现treeview的加载。
主要步骤
1.ItemModel实体
代码如下(示例):
public class PropertyNodeItem: ViewModelBase
{
public string DisplayName { get; set; }
}
public class GroupModel : ViewModelBase
{
/// <summary>
/// 组名
/// </summary>
public string GroupName { get; set; }
private int groupCount;
/// <summary>
/// 组数量
/// </summary>
public int GroupCount
{
get { return groupCount; }
set { groupCount = value; base.RaisePropertyChanged("GroupCount"); }
}
/// <summary>
/// 子类集合
/// </summary>
public ObservableCollection<PropertyNodeItem> ItemModelList { get; set; }
}
2.读取xml数据
代码如下(示例):
GroupSourceList = new ObservableCollection<GroupModel>();// treeview 数据源
//GroupModel gp = new GroupModel();
XmlDocument docu = new XmlDocument();
docu.Load("bb.xml");
XmlNode FirstNode = docu.FirstChild;//element city 找到根节点
//PropertyNodeItem CityNode = new PropertyNodeItem()//A1 确定跟节点的名称
//{
// DisplayName = FirstNode.Attributes[0].Value,
//};
for (int i = 0; i < FirstNode.ChildNodes.Count; i++)//获取根节点下面的节点
{
GroupModel gp = new GroupModel();
gp.GroupName = FirstNode.ChildNodes[i].Attributes[0].Value;
gp.GroupCount = FirstNode.ChildNodes.Count;
gp.ItemModelList = new ObservableCollection<PropertyNodeItem>();
//GroupModel DistrictNode = new GroupModel() //二节点的名字
//{
// GroupName = FirstNode.ChildNodes[i].Attributes[0].Value,
//};
for (int j = 0; j < FirstNode.ChildNodes[i].ChildNodes.Count; j++)//三节点里的内容
{
gp.ItemModelList.Add(new PropertyNodeItem() { DisplayName = FirstNode.ChildNodes[i].ChildNodes[j].Attributes[0].Value });
}
GroupSourceList.Add(gp);
}
该处使用的url网络请求的数据。
3.数据源binding xaml
<Window.Resources>
<HierarchicalDataTemplate x:Key="template_Item">
<TextBlock Text="{Binding DisplayName}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="template_Group" ItemsSource="{Binding ItemModelList}" ItemTemplate="{StaticResource template_Item}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding GroupName}"/>
<TextBlock Text="{Binding GroupCount}" Margin="5,0,0,0"/>
</StackPanel>
</HierarchicalDataTemplate>
</Window.Resources>
<mc:MyTreeView Grid.Column="0" x:Name="myTree" MouseMove="TreeView_MouseMove" TextBlock.FontSize="14" MySelectItem="{Binding SelectNode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding GroupSourceList}" ItemTemplate="{StaticResource template_Group}">
</mc:MyTreeView>