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

Posted 淹死的鸭子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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];

        }

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

 

以上是关于WPF ComboBox下拉绑定Treeview 功能的实现的主要内容,如果未能解决你的问题,请参考以下文章

wpf如何根据输入信息动态生成treeview

c#怎么用comboBox绑定treeview控件

WPF{ComboBox绑定类对象, 下拉列显示的值,与取到的值}

在WPF中怎么将ComboBox的下拉列表的数据进行绑定?还有能不能TXT文件中的列表?

在wpf中怎么绑定comboBox的值

在WPF使用中读取一个配置文件获得一个结构体list,然后将数据绑定到Combobox下拉列表框中,如何实现?