WPF:TreeView绑定

2021-07-15 03:15

阅读:404

标签:open   inotify   ESS   class   public   .property   数据类型   type   container   

 

namespace PostViewer
{
    using System.Collections.ObjectModel;
    using System.ComponentModel;

    /// 
    /// 数据类型ViewModel.
    /// 
    public class VmTviDataType : ITreeItem
    {
        private bool mIsExpanded = true;
        private bool mIsSelected;

        /// 
        /// Initializes a new instance of the  class.
        /// 
        /// 类型.
        public VmTviDataType()
        {
            this.TviDataList = new ObservableCollection();
        }

        /// 
        public event PropertyChangedEventHandler PropertyChanged;

        /// 
        /// Gets or sets 元素名称.
        /// 
        public string Header { get; protected set; }

        /// 
        /// Gets or sets a value indicating whether Treeviewitem 展开.
        /// 
        public bool IsExpanded
        {
            get
            {
                return this.mIsExpanded;
            }

            set
            {
                if (value != this.mIsExpanded)
                {
                    this.mIsExpanded = value;
                    this.OnPropertyChanged("IsExpanded");
                }
            }
        }

        /// 
        /// Gets or sets a value indicating whether Treeviewitem 选中.
        /// 
        public bool IsSelected
        {
            get
            {
                return this.mIsSelected;
            }

            set
            {
                if (value != this.mIsSelected)
                {
                    this.mIsSelected = value;
                    this.OnPropertyChanged("IsSelected");
                }
            }
        }

        /// 
        /// Gets or sets 数据集合.
        /// 
        public ObservableCollection TviDataList { get; set; }

        /// 
        /// 属性变更事件处理.
        /// 
        /// 属性名称.
        protected void OnPropertyChanged(string v)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v));
        }
    }
}

 

 

// // Copyright (c) Xtech. All rights reserved.
// 

namespace PostViewer
{
    using System.ComponentModel;

    /// 
    /// 树形控件接口.
    /// 
    public interface ITreeItem : INotifyPropertyChanged
    {
        /// 
        /// Gets or sets a value indicating whether 是否选中.
        /// 
        bool IsSelected { get; set; }

        /// 
        /// Gets or sets a value indicating whether 是否展开.
        /// 
        bool IsExpanded { get; set; }

        /// 
        /// Gets 元素显示名称.
        /// 
        string Header { get; }
    }
}

 

UserControl x:Class="PostViewer.UcProjectTree"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:PostViewer"
             mc:Ignorable="d" 
             d:DesignHeight="600" d:DesignWidth="300">
    Grid>
        TreeView ItemsSource="{Binding TviProjectTypes}">
            TreeView.ItemContainerStyle>
                Style TargetType="{x:Type TreeViewItem}">
                    Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                    Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                    Setter Property="HorizontalContentAlignment" Value="Center" />
                    Setter Property="VerticalContentAlignment" Value="Center" />
                    Setter Property="FontWeight" Value="Normal" />
                    Style.Triggers>
                        Trigger Property="IsSelected" Value="True" >
                            Setter Property="FontWeight" Value="Bold" />
                        Trigger>
                    Style.Triggers>
                Style>
            TreeView.ItemContainerStyle>
            TreeView.Resources>
                HierarchicalDataTemplate DataType="{x:Type local:VmTviProjectType}" ItemsSource="{Binding TviDataTypes}">
                    StackPanel Orientation="Horizontal" Margin="0 2 5 0">
                        TextBlock Text="{Binding Header}"/>
                    StackPanel>
                HierarchicalDataTemplate>
                HierarchicalDataTemplate DataType="{x:Type local:VmTviDataType}" ItemsSource="{Binding TviDataList}">
                    StackPanel Orientation="Horizontal" Margin="0 2 5 0">
                        TextBlock Text="{Binding Header}" />
                    StackPanel>
                HierarchicalDataTemplate>
                HierarchicalDataTemplate DataType="{x:Type local:VmTviData}">
                    StackPanel Orientation="Horizontal" Margin="0 2 5 0">
                        Image Width="15" Height="15" Margin="0, 1, 0 ,0" Source="/PostViewer;component/Resources/tree_blue.png" />
                        TextBlock Text="{Binding Header}" />
                        
                    StackPanel>
                HierarchicalDataTemplate>
            TreeView.Resources>
        TreeView>
    Grid>
UserControl>

 

WPF:TreeView绑定

标签:open   inotify   ESS   class   public   .property   数据类型   type   container   

原文地址:https://www.cnblogs.com/xpvincent/p/9525365.html


评论


亲,登录后才可以留言!