WPF ComboBox下拉绑定Treeview 功能的实现

因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能。相关代码如下:

XAML部分的代码:

<ComboBox Grid.Row="0"  Grid.Column="9" HorizontalAlignment="Left" Name="OrgaComboBox" Margin="6"   VerticalAlignment="Top" Width="200" RenderTransformOrigin="0.392,0.565" DropDownClosed="OrgaComboBox_DropDownClosed">
                <ComboBoxItem Visibility="Collapsed"></ComboBoxItem>
                <ComboBoxItem>
                    <ComboBoxItem.Template>
                        <ControlTemplate>
                            <TreeView Name="lftTree" Margin="0" ItemsSource="{Binding}"  SelectedItemChanged="lftTree_SelectedItemChanged"
                                          DisplayMemberPath="OrgName" SelectedValuePath="OrgId" >
                                <TreeView.ItemContainerStyle>
                                    <Style TargetType="TreeViewItem">
                                        <Setter Property="IsExpanded" Value="{Binding IsExpand}"></Setter>
                                    </Style>
                                </TreeView.ItemContainerStyle>
                                <TreeView.ItemTemplate>
                                    <HierarchicalDataTemplate  ItemsSource="{Binding Children}">
                                        <TextBlock  Text="{Binding OrgName}"></TextBlock>
                                    </HierarchicalDataTemplate>
                                </TreeView.ItemTemplate>
                            </TreeView>
                        </ControlTemplate>
                    </ComboBoxItem.Template>
                </ComboBoxItem>
            </ComboBox>

后台相关代码:

ObservableCollection<OrgaViewModel> orgaCollection = new ObservableCollection<OrgaViewModel>();

List<IOrganization> iorganizations = this.serviceAgent.QueryRootOrganizations();
            //List<Organization> iorganizations = this.localDataAccess.QueryRootOrganizations();
            if (iorganizations == null)
            {
                return;
            }
            foreach (IOrganization current in iorganizations)
            {
                OrgaViewModel orgaVM = new OrgaViewModel
                {
                    IsExpanded = true,
                    OrgCode = current.OrgCode,
                    OrgId = current.OrgId,
                    OrgName = current.OrgName,
                    ParentOrgId = current.ParentOrgId
                };
                GetChildOrganization(orgaVM);
                orgaCollection.Add(orgaVM);
            }
            this.OrgaComboBox.DataContext = orgaCollection;

为了选中树的某个节点,能在ComboBox中显示数据,分别用了树和下拉框的一个控件事件:

private void lftTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {

            try
            {

                tempOVM = (OrgaViewModel)e.NewValue;
                selectedOrgName = tempOVM.OrgName;
                selectedOrgId = tempOVM.OrgId;               

            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
            }

        }

 private void OrgaComboBox_DropDownClosed(object sender, EventArgs e)
        {
            OrgaComboBox.Items[0] = selectedOrgName;
            OrgaComboBox.SelectedItem = OrgaComboBox.Items[0];

        }

实现的效果基本能满足项目需要了。

时间: 2024-11-02 10:03:04

WPF ComboBox下拉绑定Treeview 功能的实现的相关文章

WPF 组织机构下拉树多选,递归绑定方式现实

原文:WPF 组织机构下拉树多选,递归绑定方式现实 使用HierarchicalDataTemplate递归绑定现实 XAML代码: <UserControl x:Class="SunCreate.CombatPlatform.Client.MultiSelOrgTree" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

WinForm多窗体间操作,ComboBox下拉菜单控件

1.通过操作一个窗体打开另一个窗体 已有窗体为Form1.Form1中有一个按钮,对该按钮编写点击事件: Form2 f2 = new Form2();f2.Show(); 通过这段代码来打开Form2. 在实际应用中会出现代开Form2后需要Form1隐藏的情况,此时可以加入代码:this.Hide();来实现隐藏Form1. [不能关闭Form1,如果关闭Form1,那么Form2也会关闭,因为Form1是主窗体] 2.在窗体之间进行值的传递 在某些情况下,需要用到某个已经获取到的值,为了提

PullToRefreshRecyclerView——带上拉刷新下拉加载功能的RecyclerView

PullToRefreshRecyclerView——带上拉刷新下拉加载功能的RecyclerView

refreshcontrol 实现下拉刷新的功能

该组件实现下拉刷新的功能.不过该组件是用在ScrollView的内部的,为ScrollView添加一个下拉刷新的功能.当ScrollView的垂直方向的偏移量scrollY:0的时候,手指往下拖拽ScrollView就会触发onRefresh事件方法. 相关的属性: onRefresh  function方法 当视图开始刷新的时候调用 refreshing  bool  决定加载进去指示器是否为活跃状态,也表名当前是否在刷新中 colors [ColorPropType]   android平台

Devexpress GridControl 设置combobox下拉框

GridControl 设置combobox下拉框 //设置combobox下拉框        private void GetComboBox(string str)        {            RepositoryItemComboBox combobox = new RepositoryItemComboBox();            combobox.Items.Add(str);            combobox.AllowNullInput = DevExpr

extjs4 分页工具栏pagingtoolbar的每页显示数据combobox下拉框

var itemsPerPage = 20; var combo; //创建数据源store Ext.define('recordStore', { extend : 'Ext.data.Store', // autoLoad : { // start : 0, // limit : itemsPerPage // }, start : 0, limit : itemsPerPage, pageSize : itemsPerPage, model : 'recordModel', proxy :

sencha combobox下拉框不用jsonstore,直接使用字符串数组做数据源

combobox下拉框的store除了可以选择一个jsonstore来加载数据,还可以直接写成字符串Array的形式. { xtype: 'combobox', fieldLabel: 'Label', store: [ 'aa', 'bb', 'cc' ], listeners: { change: { fn: me.onComboboxChange, scope: me } } } sencha architecture里设置如下(点击store前面的小图标弹出选择项,选择Array,然后直

easyui的combobox下拉框初始化默认值以及保持该值一直显示的方法

easyui的combobox下拉框默认初始值是空,下面是实现从远程加载数据之后初始化默认值,以及让该值一直排在下拉框的最顶部的方式. 目前的需求是需要在初始化的时候添加"全部数据库"字段,并且在下拉的时候,"全部数据库"一直排在最顶部. 初始化效果如下: 下拉之后的效果如下: 实现方式: easyui的combobox有一个loader属性,easyui的API对loader属性说明如下: easyui的combobox有一个onLoadSuccess事件,eas