因为项目中需要用到TreeView控件,由于是第一次在WPF中用到,因此事先在网上搜了很多关于数据绑定的方法介绍,个人经过实际应用,觉得WPF中的HierarchicalDataTemplate定义模板确实好用很多,但是今天在自己的WPF+MVVM项目中使用了另一种方式。代码不妥之处,望赐教。

先说数据绑定:

1、前台Xmal代码:(没有使用模板定义)

<TreeView Name="treeview"/>

/2、在后台的XAML交互逻辑cs代码添加数据上下文并将 treeview作为参数传递到对应的ViewModel中

public   treeView()
    {
      InitializeComponent();
     this.DataContext = new treeViewVM(this.treeview);
     }

3、定义实体类,此处举例

/// contry: 县城实体类(属性说明自动提取数据库字段的描述信息,对应数据库中的contry表)

public class contry 
{
public contry ();

string  MC{get;set;}

int ID{get;set;}

int parentID{get;set}

}

/4、在 treeViewVM中实现数据的绑定

//构造函数,接收前台传递过来的treeView对象

public treeViewVM(TreeView tr)
{
this.treeview = tr;
initialCommand();
RefreshTreeView(); //刷新treeView,获取数据
}

/// <summary>
/// 创建TreeView的Item
/// </summary>
/// <param name=""></param>
/// <returns></returns>
private TreeViewItem CreateTreeViewItem(contry cty)
{
TreeViewItem tvi = new TreeViewItem();
tvi.Header = cty.MC;
tvi.Tag = cty;
tvi.IsExpanded = true;// 设置数据列表为展开
return tvi;
}

/// <summary>
/// 获取treeView中的一级节点,并实现递归遍历
/// </summary>
/// <param name="contryList"></param>
/// <returns></returns>
public List<contry > Bind(List<contry > contryList)
{

contryList= DicCacheList.Instance.GetListByTableName<contry >(true);//在缓存的字典中获取contry数据表的list集合,具体封装的方法此处省略;
var list = contryList.Where(a => a.parentID== null || a.parentID== "_").ToList();//事先在数据库中设置一级节点的parentID(父级ID)为空或者为"_",此处获取一级节点的数据集合;

if (list.Count == 0)
{
return null;
}
list.ForEach(a =>
{
TreeViewItem tvi1 = CreateTreeViewItem(a);
treeview.Items.Add(tvi1);
FindDownward(contryList, a.ID, tvi1);
});
return null;
}

/// <summary>
/// 递归遍历treeview的实现方法
/// </summary>
/// <param name=""></param>
/// <param name="id"></param>
/// <param name="tvi"></param>
/// <returns></returns>
public contry FindDownward(List<contry> contryList, string id, TreeViewItem tvi)
{
if (contryList == null)
{
return null;
}
var list = contryList.Where(a => a.parentID== id).ToList();

if (list.Count == 0)
{
return null;
}
list.ForEach(a =>
{
TreeViewItem tvi2 = CreateTreeViewItem(a);
tvi.Items.Add(tvi2);
FindDownward(contryList, a.ID, tvi2);
});
return null;
}

/// <summary>
/// 获取treeView列表,刷新列表
/// </summary>
private void RefreshTreeView()
{
var contryList= DicCacheList.Instance.GetListByTableName<contry>(true);
treeview.Items.Clear();
Bind(contryList);
}

WPF中TreeView的使用的更多相关文章

  1. WPF中TreeView.BringIntoView方法的替代方案

    原文:WPF中TreeView.BringIntoView方法的替代方案 WPF中TreeView.BringIntoView方法的替代方案 周银辉 WPF中TreeView.BringIntoVie ...

  2. WPF中TreeView控件的使用案例

    WPF总体来说还是比较方便的,其中变化最大的主要是Listview和Treeview控件,而且TreeView似乎在WPF是一个备受指责的控件,很多人说他不好用.我这个demo主要是在wpf中使用Tr ...

  3. WPF中TreeView单击展开其子元素以及点击一个元素展开其他元素收起

    TreeView单击展开其子元素: 在WPF的TreeView控件中,要想展开它的子元素,我们必须要鼠标左键点两下或者右键点一下,那么我们怎样实现左键点一下就使它展开呢? Xaml: <Grid ...

  4. WPF中TreeView控件SelectedItemChanged方法的MVVM绑定

    问题描述:左侧treeview控件中点击不同类别的节点时,右侧的页面会显示不同的权限.比如对于My Publications,拥有Modify和Delete两种权限,对于My Subscription ...

  5. WPF中TreeView控件数据绑定和后台动态添加数据(二)

    写在前面:在(一)中,介绍了TreeView控件MVVM模式下数据绑定的方法.在这篇文章中,将总结给节点添加事件的方法,这样说有些不对,总之实现的效果就是点击某个节点,将出现对应于该节点的页面或者数据 ...

  6. WPF中TreeView控件数据绑定和后台动态添加数据(一)

    数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...

  7. WPF中TreeView的+-号和连线style的一种实现

    最近又开始跟WPF打交道,项目里面用到了TreeView这个控件.然后需要有一个连线的外观就像是这样 二话不说,百度了一下,找到一个实现, 通道. 把代码拷贝到项目里面,跑了一下,看上去还不错.但是这 ...

  8. WPF中TreeView数据结构解析

    XAML.CS代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  9. WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条)

    原文:WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) 对于TreeView而言: TreeViewAut ...

随机推荐

  1. Cisco ASA 配置案例---anyconnect拨通后所有流量从服务器端出去

    一.目的: 1.Cisco ASA之Lan端能正常上网. 2.anyconnect端所有流量从Cisco ASA的Outside出去. 3.anyconnect端能访问Cisco ASA的Inside ...

  2. C# 类:类型 , 数学:类型

    类(类型):   //.Length:获取字符串的长度,返回int型                        //.Trim去除字符串前后的空格                        / ...

  3. Voreen (二) 入点出点计算

    继第一篇Voreen的文章介绍主流程以后,第二篇介绍Raycast的第一个绘制Pass,根据代理几何体绘制出入点出点.如上次所说,OptimizedProxyGeometry负责生成表示体数据的代理几 ...

  4. Mongodb在Windows 7下的安装及配置

    第一步 下载MongoDB: 下载mongodb的windows版本,有32位和64位版本,根据操作系统情况下载,下载地址:http://www.mongodb.org/downloads 解压缩至指 ...

  5. BeanUtils.copyProperties和PropertyUtils.copyProperties的使用区别

    http://caoyaojun1988-163-com.iteye.com/blog/1871316

  6. web开发实战--图片裁剪和上传

    前言: 最近的开发中, 有一个上传头像的任务. 由于头像本身的特殊性, 其一般流程为选择图片, 编辑裁剪区域, 再继而上传图片操作. 看似简单的东西, 实则是挺麻烦的一件事. 借助这次开发机会, 来具 ...

  7. 防止sql注入

    sqlmap 较专业的sql注入工具YII2  activeform   注意传过来的modle的rules规则 <?php$form=\yii\widgets\ActiveForm::begi ...

  8. Android延时执行调用的几种方法

    一.开启新线程 new Thread(new Runnable(){        public void run(){            Thread.sleep(XXXX);          ...

  9. POI2012

    现在才开始写 POI 是不是太弱了? -Rendezvous 怎么说呢,我发现我的代码好长啊-长啊-长啊-长长长长长长长长长长长长长长长长长长长长长长啊- 大概就是在一个内向树上搞一个类似 lca 的 ...

  10. kbengine0.4.20源代码分析(一)

    基于kbengine 0.4.2 MMOPG服务端是一种高品质的工程项目,品读开源的kbe是一种乐趣.本文档我带童鞋们一起领略一下.囿于我知识面和经验方面所限,文中所述之处难免有错误存在,还请读童鞋们 ...