zoukankan      html  css  js  c++  java
  • TreeView

    <navigation:Page xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
      x:Class="BusinessApplication1.Home" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
      xmlns:Data="clr-namespace:System.Windows;assembly=System.Windows.Controls" 
    
      mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"  
      Style="{StaticResource PageStyle}">
        
        
    
      <Grid x:Name="LayoutRoot">
            <Grid.Resources>
                <Data:HierarchicalDataTemplate x:Key="UserGroupTemplate" 
                          ItemsSource="{Binding Childern}">
                    <StackPanel Orientation="Horizontal" 
                          Height="Auto" Width="Auto">  
                        <TextBlock> <Run Text="{Binding Name}"></Run>(<Run Text="{Binding Type}"></Run>) </TextBlock>
                    </StackPanel>
                </Data:HierarchicalDataTemplate>
                <Style TargetType="sdk:TreeView" x:Key="UserGroupStyle">
                    <Setter Property="ItemTemplate" 
                           Value="{StaticResource UserGroupTemplate}"/>
                    <Setter Property="BorderThickness" Value="1"/>
                </Style> 
    
            </Grid.Resources>
                <ScrollViewer x:Name="PageScrollViewer" Style="{StaticResource PageScrollViewerStyle}">
    
            <StackPanel x:Name="ContentStackPanel" Style="{StaticResource ContentStackPanelStyle}">
    
                    <Grid>
                        <Grid.ColumnDefinitions >
                            <ColumnDefinition Width="250"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"></RowDefinition>
                            <RowDefinition Height="30"></RowDefinition>
                        </Grid.RowDefinitions>
                        <sdk:TreeView x:Name="trv" SelectedItemChanged="trv_SelectedItemChanged"
                                      ItemsSource="{Binding Items}" 
                                      Style="{StaticResource UserGroupStyle}"></sdk:TreeView>
                        <StackPanel Grid.Row="1" Orientation="Horizontal" >
                            <Button Content="+B" CommandParameter="Brand" Command="{Binding AddItemCMD}"></Button>
                            <Button Content="+L" CommandParameter="Product Line" Command="{Binding AddItemCMD}"></Button>
                            <Button Content="+P" CommandParameter="Product" Command="{Binding AddItemCMD}"></Button>
                            <Button Content="+T" CommandParameter="Task" Command="{Binding AddItemCMD}"></Button>
                        </StackPanel>
                       
                    </Grid>                   
    
          </StackPanel>
    
        </ScrollViewer>
      </Grid>
    
    </navigation:Page>
    namespace BusinessApplication1
    {
        using System.Windows.Controls;
        using System.Windows.Navigation;
        using System.Collections.ObjectModel;
        using System;
        using System.Windows;
        using System.ComponentModel;
        using System.Linq.Expressions;
        using System.Windows.Input;
    
        /// <summary>
        /// Home page for the application.
        /// </summary>
        public partial class Home : Page
        {
            /// <summary>
            /// Creates a new <see cref="Home"/> instance.
            /// </summary>
            public Home()
            {
                InitializeComponent();
    
                this.Title = ApplicationStrings.HomePageTitle;
    
                this.DataContext = VM ;
    
    
            }
    
            MainViewModel VM = new MainViewModel();
    
            void trv_SelectedItemChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<object> e)
            {
                VM.SelectedItem = e.NewValue as NameValue;
            }
    
            /// <summary>
            /// Executes when the user navigates to this page.
            /// </summary>
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
            }
        }
    
        public class MainViewModel : NotifyPropertyChangedBase
        {
            public MainViewModel()
            {
                addItemCMD = new XCommand(AddItem);
            }
    
            ObservableCollection<NameValue> items = new ObservableCollection<NameValue>();
            public ObservableCollection<NameValue> Items { get { return items; } }
    
            NameValue selectedItem;
            public NameValue SelectedItem { get { return selectedItem; } set { selectedItem = value; RaisePropertyChanged(() => this.SelectedItem); } }
    
            string type;
            XCommand addItemCMD;
            public XCommand AddItemCMD { get { return addItemCMD; } }
            void AddItem(object p)
            {
                type = p as string;
                BusinessApplication1.Views.AddItem add = new Views.AddItem();
                add.Title = "Add " + type;
                add.Closed += new EventHandler(add_Closed);
                add.Show();
                
            }
    
            void add_Closed(object sender, EventArgs e)
            {
                BusinessApplication1.Views.AddItem add = sender as BusinessApplication1.Views.AddItem ;
    
                if (add.DialogResult == true)
                {
                    var nv = new NameValue { Name = add.name.Text, Type = type };
                    if (selectedItem == null)
                    {
                        items.Add(nv);
                        MessageBox.Show("Added " + type + " as Root");
                    }
                    else
                    {
                        selectedItem.Childern.Add(nv);
                        MessageBox.Show("Added " + type + " under " + selectedItem.Name);
                    }
                }
                else
                {
                    MessageBox.Show("Discard changes !");
                }
            }
    
        }
    
        public class NameValue
        {
            public string Name { get; set; }
            public string Value { get; set; }
            public string Type { get; set; }
            ObservableCollection<NameValue> childern = new ObservableCollection<NameValue>();
            public ObservableCollection<NameValue> Childern { get { return childern; } }
    
            public static ObservableCollection<NameValue> Get()
            {
                ObservableCollection<NameValue> list = new ObservableCollection<NameValue>();
                Random r = new Random();
                for (int i = 1; i < r.Next(5, 10); i++)
                {
                    NameValue root1 = new NameValue { Name = "Node_" + i, Type = "Brand" };
                    list.Add(root1);
                    for (int j = 1; j < r.Next(5, 10); j++)
                    {
                        NameValue root2 = new NameValue { Name = "Node_" + i + "_" + j, Type = j % 3 == 1 ? "Key Word" : "Product Line" };
                        root1.Childern.Add(root2);
                        for (int l = 1; l < r.Next(5, 10); l++)
                        {
                            NameValue root3 = new NameValue { Name = "Node_" + i + "_" + j + "_" + l, Type = l % 3 == 1 ? "Key Word" : "Product" };
                            root2.Childern.Add(root3);
                        }
                    }
                }
                return list;
            }
        }
    
        public class XCommand : ICommand //: ICommand
        {
            private Predicate<object> canExecute;
            bool prevCanExe = true;
            private Action<object> action;
            public event EventHandler CanExecuteChanged;
    
            public XCommand(Action<object> method)
                : this(method, null)
            {
            }
    
            public XCommand(Action<object> _action, Predicate<object> _canExecute)
            {
                action = _action;
                canExecute = _canExecute;
                prevCanExe = CanExecute(null);
            }
    
            public bool CanExecute(object parameter)
            {
                if (canExecute == null)
                    return true;
                bool temp = canExecute(parameter);
                if (temp != prevCanExe)
                {
                    prevCanExe = temp;
                    if (CanExecuteChanged != null)
                    {
                        CanExecuteChanged(this, EventArgs.Empty);
                    }
                }
                return temp;
            }
    
            public void Execute(object parameter)
            {
                if (CanExecute(parameter) && action != null)
                    action(parameter);
            }
        }
    
        public abstract class NotifyPropertyChangedBase : INotifyPropertyChanged
        {
            #region Constructor
    
            protected NotifyPropertyChangedBase()
            {
    
            }
    
            #endregion
    
            #region Events
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            #endregion
    
            #region Event Handlers
    
            /// <summary>
            /// Get name of property
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="e"></param>
            /// <returns></returns>
            public static string GetPropertyName<T>(Expression<Func<T>> e)
            {
                var member = (MemberExpression)e.Body;
                return member.Member.Name;
            }
            /// <summary>
            /// Raise when property value propertychanged or override propertychage
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="propertyExpression"></param>
            protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
            {
                RaisePropertyChanged(GetPropertyName(propertyExpression));
            }
            /// <summary>
            /// Raise when property value propertychanged
            /// </summary>
            /// <param name="propertyName"></param>
            protected void RaisePropertyChanged(String propertyName)
            {
                PropertyChangedEventHandler temp = PropertyChanged;
                if (temp != null)
                {
                    temp(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
            #endregion
    
        }
    
    
    }
    
  • 相关阅读:
    连接SDE数据库hl3292修改已解决
    ORACLE 10g 安装
    SharpMap相关的一些博客和网站
    Delphi 学习之函数 ②扩展的日期时间操作函数
    Delphi学习之函数 ⑾进制函数及过程
    Delphi学习之函数 ① 扩展的字符串操作函数
    html 初次接触html学习【1】
    Delphi 学习之函数 ③ 扩展的位操作函数
    Delphi学习之函数 ⑨汉字拼音功能函数
    Delphi学习之函数 ④扩展的文件及目录操作函数
  • 原文地址:https://www.cnblogs.com/mjgb/p/3161436.html
Copyright © 2011-2022 走看看