DevExpress NavBarItem在使用WPF TreeView的ContentTemplate中正确地绑定了数据

时间:2014-07-29 14:03:27

标签: wpf data-binding treeview devexpress

我尝试使用以下代码将每个NavBarGroup中的NavBarItem元素组织到树视图中:

<dxn:NavBarControl DataContext="{Binding}" ItemsSource="{Binding Bars}"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
  <dxn:NavBarControl.Resources>
    <Style TargetType="dxn:NavBarGroup">
      <Setter Property="Header" Value="{Binding DisplayText}"/>
      <Setter Property="Content" Value="{Binding MenuItems}"/>
      <Setter Property="DisplaySource" Value="Content"/>
      <Setter Property="ContentTemplate">
        <Setter.Value>
          <DataTemplate>
            <TreeView x:Name="MenuView" ItemsSource="{Binding}" >
              <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Path=ChildItems}"  >
                  <ContentControl>
                    <dxn:NavBarItem 
                      DataContext="{Binding}" 
                      Content="{Binding ItemText}" PreviewMouseUp="MenuItemOnPreviewMouseUp" Initialized="FrameworkContentElement_OnInitialized" />
                  </ContentControl>
                </HierarchicalDataTemplate>
              </TreeView.ItemTemplate>
            </TreeView>
          </DataTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </dxn:NavBarControl.Resources>
  <dxn:NavBarControl.View>
    <dxn:ExplorerBarView/>
  </dxn:NavBarControl.View>
</dxn:NavBarControl>

这些组正确绑定,我只填充一个组,&#34;人员&#34;出于调试原因,使用迷你层次结构:

"Personnel"
--"Employees"
----"Contractors"
------"Time-sheets"

我在树视图中得到了正确的结构,但每个项目只有调用NavBarItem.ToString()产生的文本。当我处理NavBarItem.Initialized偶数时,sender参数NavBarItem实际上在Content属性中具有正确的值,因此绑定不会全部被破坏,但我不知道是什么,我在这里寻求帮助。

1 个答案:

答案 0 :(得分:1)

首先,需要注意NavBarGroup和NavBarItem是非可视元素。因此,如果您将它们用作ContentPresenter内容,则只会显示简单的字符串(就像您在案例中看到的那样)。

第二件事是NavBar不支持多级层次结构(仅限组级别和项目级别)。

因此,如果您需要显示两个以上的级别,您可以使用样本中使用的TreeView,但将TreeViewItems放入内容模板而不是放置NavBarItems;如果只需要两个级别,则可以使用NavBarControl.ItemsSource和NavBarGroup.ItemsSource属性来填充布局。