现在已经实现了treeview的数据绑定 通过控件模板 在xaml文件中进行绑定的 后台就是一个给控件赋数据库的句子
比如 ItemsSource = xxx (数据源是一个实体 List<xxxx>)
但是因为给treeview加上了checkbox控件 所以不知道该怎么实现联动,并且能保证复选框的三态在网上看到有给实体加上依赖属性,或者是实体继承INotifyPropertyChanged接口 但还是感觉无从下手
请高人指点 谢谢了 最好能提供详细的思路 或者代码片段
比如 ItemsSource = xxx (数据源是一个实体 List<xxxx>)
但是因为给treeview加上了checkbox控件 所以不知道该怎么实现联动,并且能保证复选框的三态在网上看到有给实体加上依赖属性,或者是实体继承INotifyPropertyChanged接口 但还是感觉无从下手
请高人指点 谢谢了 最好能提供详细的思路 或者代码片段
我是wpf 不是winform 这2个是有区别的
private void bindTree()
{
SqlConnection con = new SqlConnection("server=.;database=DBzealot;integrated security=SSPI;");
SqlCommand cmb = new SqlCommand("select *from treeTest", con);
SqlDataReader reader;
con.Open();
reader = cmb.ExecuteReader();
ListTree = new List<classTree>();
while (reader.Read())
{
classTree csTree = new classTree();
csTree.ID = (int)reader["nodeID"];
csTree.Name = (string)reader["nodeName"];
if (reader["parentNodeID"] != DBNull.Value)
{
csTree.ParenID = (int)reader["parentNodeID"];
}
ListTree.Add(csTree);
}
con.Close();
int i;
for (i = 0; i < ListTree.Count; i++)
{
if (ListTree[i].ParenID == 0)
{
TreeNode rootNode = new TreeNode();
rootNode.Text = ListTree[i].Name + ",子节点数:0";//默认的子节点数量为0
rootNode.Tag = ListTree[i];
treeView1.Nodes.Add(rootNode);
addNodes(rootNode);//调用递归方法
}
}
}
private int addNodes(TreeNode node)//参数为父节点
{
int count = 0;
int childCount = 0;
classTree csTr = (classTree)node.Tag; for (int i = 0; i < ListTree.Count; i++)
{
if (csTr.ID == ListTree[i].ParenID)
{
++count;
TreeNode childNode = new TreeNode();
childNode.Text = ListTree[i].Name + ",子节点数:0";
childNode.Tag = ListTree[i];
node.Nodes.Add(childNode);//添加子节点
childCount+=addNodes(childNode);//在这里递归,返回子节点的所有子节点数量
}
}
node.Text = csTr.Name + ",子节点数:" + Convert.ToString(childCount + count);//给父节点赋值
csTr.KidCount = childCount + count;
node.Tag = csTr;
return childCount + count;//返回父节点的所有子节点数量
}