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{ComboBox绑定类对象, 下拉列显示的值,与取到的值}