因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能。相关代码如下:
XAML部分的代码:
<ComboBox Grid.Row="" Grid.Column="" HorizontalAlignment="Left" Name="OrgaComboBox" Margin="" VerticalAlignment="Top" Width="" RenderTransformOrigin="0.392,0.565" DropDownClosed="OrgaComboBox_DropDownClosed">
<ComboBoxItem Visibility="Collapsed"></ComboBoxItem>
<ComboBoxItem>
<ComboBoxItem.Template>
<ControlTemplate>
<TreeView Name="lftTree" Margin="" 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[] = selectedOrgName;
OrgaComboBox.SelectedItem = OrgaComboBox.Items[]; }
实现的效果基本能满足项目需要了。