【问题标题】:Expand child nodes in another treeview WPF在另一个树视图 WPF 中展开子节点
【发布时间】:2015-09-02 06:36:31
【问题描述】:

我的面板中有两个树视图。

要做: 将节点扩展到第 2 级。 在第一个树视图中选择父节点时,它应在第二个树视图中显示子节点及其详细信息。在选择父节点时,子节点应在新选项卡/新树视图中打开。

需要帮助!

  <telerik:RadTreeListView 
            x:Name="Tree1"
            AutoGenerateColumns="False"
            ShowInsertRow="False"
            RowDetailsVisibilityMode="Collapsed"
            RowIndicatorVisibility="Collapsed"
            EnableColumnVirtualization="True"
            EnableRowVirtualization="True"
            SelectionMode="Single"
            SelectionUnit="Cell"
            AlternationCount="2"
            RowHeight="25"
            FontSize="14"
            FontWeight="Bold"
            GroupRenderMode="Flat"
            CanUserInsertRows="False"
            CanUserResizeRows="False"
            CanUserDeleteRows="False"
            CanUserReorderColumns="False"
            CanUserFreezeColumns="False"           
            IsExpandedBinding="{Binding IsExpanded, Mode=TwoWay}"
            IsSynchronizedWithCurrentItem="False"
            Grid.Row="1"
            Visibility="Visible"
            IsReadOnly="True" 
             
            >
            <telerik:RadTreeListView.ChildTableDefinitions>
                <telerik:TreeListViewTableDefinition ItemsSource="{Binding TeamCollection}" />
            </telerik:RadTreeListView.ChildTableDefinitions>
            <telerik:RadTreeListView.Columns>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Team}" 
                                    Header="Name" IsReadOnly="True" MinWidth="100" HeaderTextAlignment="Center" />        
            </telerik:RadTreeListView.Columns>         
        </telerik:RadTreeListView>

  <telerik:RadTreeListView 
            x:Name="Tree1"
            AutoGenerateColumns="False"
            ShowInsertRow="False"
            RowDetailsVisibilityMode="Collapsed"
            RowIndicatorVisibility="Collapsed"
            EnableColumnVirtualization="True"
            EnableRowVirtualization="True"
            SelectionMode="Single"
            SelectionUnit="Cell"
            AlternationCount="2"
            RowHeight="25"
            FontSize="14"
            FontWeight="Bold"
            GroupRenderMode="Flat"
            CanUserInsertRows="False"
            CanUserResizeRows="False"
            CanUserDeleteRows="False"
            CanUserReorderColumns="False"
            CanUserFreezeColumns="False"           
            IsExpandedBinding="{Binding IsExpanded, Mode=TwoWay}"
            IsSynchronizedWithCurrentItem="False"
            Grid.Row="1"
            Visibility="Visible"
            IsReadOnly="True" 
             
            >
            <telerik:RadTreeListView.ChildTableDefinitions>
                <telerik:TreeListViewTableDefinition ItemsSource="{Binding TeamCollection}" />
            </telerik:RadTreeListView.ChildTableDefinitions>
            <telerik:RadTreeListView.Columns>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Team}" 
                                    Header="Name" IsReadOnly="True" MinWidth="100" HeaderTextAlignment="Center" />                   
               <telerik:GridViewDataColumn DataMemberBinding="{Binding City}" 
                                    Header="City" IsReadOnly="True" MinWidth="100" HeaderTextAlignment="Center" /> 
            </telerik:RadTreeListView.Columns>         
        </telerik:RadTreeListView>

【问题讨论】:

    标签: wpf telerik treeview


    【解决方案1】:

    首先,两个 TreeView 都绑定到相同的 ItemsSources(并且具有相同的名称,甚至无法编译...)。您需要将第二个 TreeView 绑定到另一个集合,并根据第一个 TreeView 的 SelectedItem 修改该集合。

    <telerik:RadTreeListView x:Name="Tree1"
                             SelectedItem="{Binding SelectedParentItem}"
                             ...>
        <telerik:RadTreeListView.ChildTableDefinitions>
            <telerik:TreeListViewTableDefinition ItemsSource="{Binding TeamCollection}" />
        </telerik:RadTreeListView.ChildTableDefinitions>
        ...
    <telerik:RadTreeListView />
    
    <telerik:RadTreeListView x:Name="Tree2"
                             ...>
        <telerik:RadTreeListView.ChildTableDefinitions>
            <telerik:TreeListViewTableDefinition ItemsSource="{Binding ChildTeamCollection}" />
        </telerik:RadTreeListView.ChildTableDefinitions>
        ...
    <telerik:RadTreeListView />
    

    在您的 DataContext 中,当 SelectedParentItem 更改时设置 ChildTeamCollection

    private object selectedParentItem;
    public object SelectedParentItem
    {
        get { return selectedParentItem; }
        set 
        {
            if (selectedParentItem != value)
            {
                selectedParentItem = value;
                ChildTeamCollection = GetChildItemsSource();  // Retrieve the child items of the selected node
            }
        }
    }
    

    至于你问题的最后一部分......我仍然不明白你所说的“新标签\新树视图”是什么意思。你的意思是在不同的地方有一个全新的 TreeView 吗?或者您是指示例中的第二个 TreeView?

    【讨论】:

    • 我想绑定到两个树视图的相同项目源。就像文件资源管理器一样,当我在一个树视图中选择节点时,它应该从所选节点而不是父节点展开另一个树视图中的节点
    • 我将显示相同的值,但问题是我将在一个树视图(名称)中只显示一个参数,当我在该树视图中选择名称时,我需要展开名称节点。在新的树视图中,我必须为选定的名称节点显示名称、城市、国家、游戏等。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2014-07-03
    相关资源
    最近更新 更多