1. 程式人生 > >WPF ComboBox下拉綁定Treeview 功能的實現

WPF ComboBox下拉綁定Treeview 功能的實現

origin clas ember lock text .org error lap current

因為項目需要,接觸到這個功能點,借助網絡還有自己的一點摸索,實現了這個功能。相關代碼如下:

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 功能的實現