因为项目中需要用到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. PHP中FOREACH()用法

    PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误. 1. ...

  2. javascript之小积累-匿名函数表达式的最佳实践

    在写js的时候,还是经常会用的匿名函数表达式,比如 setTimeout(function() { console.log(110); }, 1000); 上面那个function()就是匿名函数表达 ...

  3. CSS 中 Font-Family 中英文对照表

    在 CSS 中,我们经常会使用 Font-Family 属性来定义字体.其中,中文字体如果直接使用中文名称,很有可能在非中文的系统环境下造成字体异常.所以通常使用字体的英文名称定义 Font-Fami ...

  4. Spring Cloud集成相关优质项目推荐

    Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus 事件.消 ...

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

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

  6. 如何设置mysql的表不区分你大小写

    Linux上安装MySQL默认是数据库的表大小写敏感的.修改很简单,只要该一个mysql的配置文件就可以了. mysql> show tables;+---------------------- ...

  7. word2vec + transE 知识表示模型

    本文主要工作是将文本方法 (word2vec) 和知识库方法 (transE) 相融合作知识表示,即将外部知识库信息(三元组)加入word2vec语言模型,作为正则项指导词向量的学习,将得到的词向量用 ...

  8. 微信开发03----------XML解析与封装

    3.1 解析微信发来的请求  微信服务器发来的请求消息都被封装在request对象中,可以从request对象中将请求参数取出来.通常是用request的getParament()方法获取请求中的参数 ...

  9. JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析

    先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...

  10. myeclipse中的weblogic 服务未正常关闭问题解决。

    myeclipse中的weblogic 服务若未正常关闭,直接启动服务会出现weblogic服务被锁. 正确操作:应该将相应的服务关掉然后重启 打开任务管理器,进入进程找到javaw,将进程结束.然后 ...