• lightswitch 添加 TreeView 控件


    代码片段

    <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  x:Class="LightSwitchApplication.TreeViewControl.DepartmentTreeViewControl"
        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:local="clr-namespace:LightSwitchApplication.TreeViewControl"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    
        <UserControl.Resources>
            <local:EntityCollectionValueConverter x:Key="EntityCollectionValueConverter" />
        </UserControl.Resources>
     
        <Grid x:Name="LayoutRoot" Background="White">
    
            <StackPanel Orientation="Horizontal">
                <sdk:TreeView Name="treeViewControl" SelectedItemChanged="treeViewControl_SelectedItemChanged"  ItemsSource="{Binding Screen.DepartmentTree}">
                    <sdk:TreeView.ItemTemplate>
    
                        <sdk:HierarchicalDataTemplate 
                                ItemsSource="{Binding 
                            Converter={StaticResource EntityCollectionValueConverter}, 
                            ConverterParameter=Children}">
    
                            <StackPanel Orientation="Horizontal">
    
                                <!--<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}"/>-->
    
                                <TextBlock Text="{Binding Path=Name, Mode=TwoWay}" 
                                           Margin="5,0" Width="74" />
                            </StackPanel>
                        </sdk:HierarchicalDataTemplate>
                    </sdk:TreeView.ItemTemplate>
                </sdk:TreeView>
            </StackPanel>
        </Grid>
    </UserControl>
    

      

    using Microsoft.LightSwitch.Framework.Client;
    using Microsoft.LightSwitch.Presentation;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace LightSwitchApplication.TreeViewControl
    {
        public partial class DepartmentTreeViewControl : UserControl
        {
            public DepartmentTreeViewControl()
            {
                InitializeComponent();
            }
    
            private void treeViewControl_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                var selectItem = (LightSwitchApplication.Department)treeViewControl.SelectedItem;
                var type1 = selectItem.GetType();
                var context = (IContentItem)this.DataContext;
                var screen = context.Screen;
                var data = (VisualCollection<LightSwitchApplication.Department>)screen.Details.Properties["DepartmentTree"].Value;
                data.SelectedItem = selectItem;
                //data.text= selectItem.Details.Properties["Id"].Value;
    
            }
    
        }
    }
    

      

    using Microsoft.LightSwitch;
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Diagnostics;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace LightSwitchApplication.TreeViewControl
    {
        public class EntityCollectionValueConverter : IValueConverter
        {
            public object Convert(object value,
                Type targetType,
                object parameter,
                System.Globalization.CultureInfo culture)
            {
                string strErrorMessage
                    = "Converter parameter should be set to the property name that will serve as source of data";
    
                IEntityObject entity = value as IEntityObject;
                if (entity == null)
                    throw new ArgumentException("The converter should be using an entity object");
                string sourcePropertyName = parameter as string;
                if (string.IsNullOrWhiteSpace(sourcePropertyName))
                    throw new ArgumentException(strErrorMessage);
    
                // Enumerate the source property using logic dispatcher 
                // and prepare the collection of entities that the control will bind to
                var entities = new ObservableCollection<IEntityObject>();
                var temporaryEntites = new List<IEntityObject>();
                entity.Details.Dispatcher.BeginInvoke(delegate
                {
                    IEntityCollection eCollection =
                        entity.Details.Properties[sourcePropertyName].Value as IEntityCollection;
                    if (eCollection == null)
                    {
                        Debug.Assert(false, "The property " + sourcePropertyName + " is not an entity collection");
                        return;
                    }
                    // Now we are on the logic thread. We cannot just stuff the observable collection
                    // with entities because the collection will immediately raise Changed events
                    // and this will result in invalid cross-thread access. So we'll use a temporary collection
                    // and copy the entites again on the UI thread
                    foreach (IEntityObject e in eCollection)
                    {
                        temporaryEntites.Add(e);
                    }
                    Microsoft.LightSwitch.Threading.Dispatchers.Main.BeginInvoke(delegate
                    {
                        // I wish ObservableCollection had an AddRange() method...
                        foreach (IEntityObject e in temporaryEntites)
                        {
                            entities.Add(e);
                        }
                    });
                });
                return entities;
            }
            public object ConvertBack(object value,
                Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }
    

     片段2

     public partial class CategoriesListDetail
        {
            private TreeView treeView = null;
            partial void CategoriesListDetail_InitializeDataWorkspace(List<IDataService> saveChangesTo)
            {
                // Write your code here.
    
            }
    
            partial void CategoriesListDetail_Created()
            {
                // Write your code here.
                this.P_Name = "";
                this.RootNode.Load();
                this.FindControl("TreeViewControl").ControlAvailable += ((o, e) =>
                {
                    treeView = e.Control as TreeView;
                    treeView.BorderThickness = new Thickness(1);
                    if (treeView.Items.Count == 0)
                    {
                        foreach (var item in this.RootNode)
                        {
                            TreeViewItem rootItem = new TreeViewItem() { Header = item.Name, Tag = item.Id };
                            treeView.Items.Add(rootItem);
                        }
                        treeView.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(TreeViewItem_SelectedItemChanged);
                    }
                });
            }
            private void TreeViewItem_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                var parentItem = e.NewValue as TreeViewItem;
                this.P_Name = (string)parentItem.Header;
                this.p_id = (int)parentItem.Tag;
                ///when collection is refreshed the event SelectedNodeEmployees_Changed is hooked up
                ///do not use Load method to avoid caching
                this.SelectedChildrenNodes.Refresh();
            }
    
            
    
            partial void SelectedChildrenNodes_Changed(NotifyCollectionChangedEventArgs e)
            {
                if (treeView != null)
                {
                    Dispatchers.Main.BeginInvoke(() =>
                    {
                        var parentItem = treeView.SelectedItem as TreeViewItem;
                        if (parentItem != null)
                        {
                            if (parentItem.Items.Count == 0 && this.SelectedChildrenNodes.Count() > 0)
                            {
                                foreach (var item in this.SelectedChildrenNodes) //.Where(act => act.Title != "???")
                                {
                                    TreeViewItem newChildItem = new TreeViewItem() { Header = item.Name, Tag = item.Id };
                                    parentItem.Items.Add(newChildItem);
                                }
                            }
                        }
                    });
                }
            }
    
        }
    

      

     

  • 相关阅读:
    sql server 字符串转成日期格式
    删除重复的数据
    sql server 去掉前后空格
    取出分组后每组的第一条记录(不用group by)按时间排序
    选中datagridview要选择的行
    sql server 跨表修改
    winfrom 打印表单
    .net导入Excel数据遇到问题(SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDataso) .
    ComboBox绑定数据源后再添加一条记录
    机器学习 | 一个基于机器学习的简单小实践:波斯顿房价预测分析
  • 原文地址:https://www.cnblogs.com/neozhu/p/3692003.html
Copyright © 2020-2023  润新知