Treeview-wpf-mvvm-hierarchicaldatatemplate

Source: Internet
Author: User

Summary: Use hierarchicaldatatemplate data template and TreeView to implement the administrative division tree in MVVM mode,

Support Tick.

One, the code

1. Model

Using system;using system.collections.generic;using system.linq;using system.text;using System.Threading.Tasks; namespace wpfhierarchicaltemplate{public    class District    {public        int ID {get; set;}        public string   XZQHDM {get; set;} Administrative Division Code Public        string XZQHMC {get; set;} Administrative division name Public        int level {get; set;} Level, 0 nationwide, 1 provinces, 2 cities, 3 counties, 4, townships, 5, village public        ilist<district> Children {get; set;}        Public District Parent {get; set;}}    }

2, ViewModel

Using system;using system.collections.generic;using system.linq;using system.text;using System.Threading.Tasks; Using System.collections.objectmodel;namespace wpfhierarchicaltemplate{public class Districtnodeviewmodel:        Modelcommon.notifyobject {private bool? isSelected = false; public bool?            IsSelected {get {return IsSelected;}                set {isSelected = value;            raisePropertyChanged ("IsSelected"); }} private bool?        isChecked = false; public bool?            IsChecked {get {return IsChecked;}                    set {if (value! = isChecked) {isChecked = value;                raisePropertyChanged ("IsChecked"); } if (this. Children.Count > 0&&this. Children[0].ischecked!=value) {foreach (var item in). Children) {                       Item.                    IsChecked = value; }} if (This.parent!=null&&this. Parent.children.count==this. Parent.Children.Count (Item=>item.ischecked==value)) {this.                    parent.ischecked = value;                Return }}} private bool?        Isexpand = false; public bool?            Isexpand {get {return isexpand;}                set {Isexpand = value;            raisePropertyChanged ("Isexpand"); }} private Observablecollection<districtnodeviewmodel> children = new Observablecollection<distric        Tnodeviewmodel> ();            Public observablecollection<districtnodeviewmodel> Children {get {return children;}                set {children = value;            raisePropertyChanged ("Children"); }} Private DistrIctnodeviewmodel parent;            Public Districtnodeviewmodel Parent {get {return parent;}                set {parent = value;            raisePropertyChanged ("Parent");        }} private District District;            Public District District {get {return District;}                set {district = value;            raisePropertyChanged ("District"); }        }    }}

Using system;using system.collections.generic;using system.linq;using system.text;using System.Threading.Tasks; Using System.collections.objectmodel;namespace wpfhierarchicaltemplate{public class Districtmainviewmodel:        Modelcommon.notifyobject {private observablecollection<districtnodeviewmodel> vmnodes;            Public observablecollection<districtnodeviewmodel> Vmnodes {get {return vmnodes;}                set {vmnodes = value;            raisePropertyChanged ("Vmnodes"); }} public Districtmainviewmodel () {this.        Vmnodes = new Observablecollection<districtnodeviewmodel> {loaddata ()}; } public Districtnodeviewmodel LoadData () {observablecollection<district> rootnodes =ne            W observablecollection<district> (); District d00 = new District () {XZQHMC = "National ", Parent = null};                              District D0 = new District () {xzqhmc= "Henan", parent=d00            };            District D1 = new District () {XZQHMC = "Beijing", Parent = d00};            District D2 = new District () {XZQHMC = "Shandong", Parent = d00};             District D11 = new District () {XZQHMC = "Haidian", Parent = D1};            District D12 = new District () {XZQHMC = "Shijingshan", Parent = D1            };                        District D13 = new District () {XZQHMC = "Chaoyang", Parent = D1};            District d01 = new District () {XZQHMC = "Shangqiu", Parent = D0            };   District d02 = new District ()         {XZQHMC = "Zhengzhou", Parent = D0};            District d03 = new District () {XZQHMC = "Zhoukou", Parent = D0}; D1.            Children = new List<district> {D11, D12, D13}; D0.            Children = new List<district> {d01, d02, d03}; D00.            Children = new list<district>{d1,d2,d0};            Rootnodes.add (d00);            Districtnodeviewmodel DNV = new Districtnodeviewmodel (); DnV.            District = Rootnodes[0];            SETDNV (DNV, rootnodes[0]);        return to DNV; } private void Setdnv (Districtnodeviewmodel vm,district root) {if (root==null| | Root. children==null| | Root.            children.count==0) {return; } foreach (var item in root.)                Children) {Districtnodeviewmodel vmnew = new Districtnodeviewmodel ();                Vmnew.district = Item;vmnew.parent = VM; Vm.                Children.add (vmnew);            SETDNV (vmnew, item); }        }    }}

3. main Window

Using system;using system.collections.generic;using system.linq;using system.text;using System.Threading.Tasks; Using system.windows;using system.windows.controls;using system.windows.data;using system.windows.documents;using System.windows.input;using system.windows.media;using system.windows.media.imaging;using System.windows.navigation;using system.windows.shapes;namespace wpfhierarchicaltemplate{//    <summary> ///    MainWindow.xaml Interactive logic///    </summary> public    partial class Mainwindow:window    {        public MainWindow ()        {            InitializeComponent ();            This. DataContext = new Districtmainviewmodel ();}}    }

  

4. Foreground XAML

<window x:class= "Wpfhierarchicaltemplate.mainwindow"        xmlns= "Http://schemas.microsoft.com/winfx/2006/xaml /presentation "        xmlns:x=" Http://schemas.microsoft.com/winfx/2006/xaml "        title=" MainWindow "height=" 350 " Width= "525" >    <Window.Resources>        

Second, the effect

Treeview-wpf-mvvm-hierarchicaldatatemplate

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.