Treeview点击时如何触发后面的Listview?

How to trigger the Listview behind when Treeview is click?

我的列表视图中有树视图,如下所示

 <ListView  x:Name="LvItemDisplay" ItemsSource="{Binding itemDisplayList}" SelectionChanged="LvItemDisplay_SelectionChanged">

      <ListView.ItemTemplate>

            <DataTemplate x:Name="dtItemDisplay">

                    <TreeView x:Name="TvItemDisplay" Background="Transparent" ItemsSource="{Binding itemDisplayList}" MouseDown="TvItemDisplay_MouseDown_1" SelectedItemChanged="TvItemDisplay_SelectedItemChanged"  >
                        .
                        .
                        .

我有树视图和列表视图的点击事件。两者都在单击时会弹出一个对话框,用户可以编辑该对话框,该对话框将从它们绑定。

问题是,每当用户想要单击树视图时,用户都需要先单击列表视图才能获得 SelectedItem。如果不是,则不会发生任何事情,因为 SelectedItem 将为空。

这是列表视图的隐藏代码

private void LvItemDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

                ListViewItem listViewItem = (ListViewItem)(LvItemDisplay.ItemContainerGenerator.ContainerFromItem(LvItemDisplay.SelectedItem));
                TreeView treeView = null;
                DialogHost dialogHost = null;

                if (LvItemDisplay.SelectedIndex != -1)
                {
                    if (listViewItem != null)
                    {
                        //get the listViewItem's template parent
                        ContentPresenter templateParent = GetFrameworkElementByName<ContentPresenter>(listViewItem);

                        //get the DataTemplate that treeview in.
                        DataTemplate dataTemplate = LvItemDisplay.ItemTemplate;

                        if (dataTemplate != null && templateParent != null)
                        {

                            treeView = dataTemplate.FindName("TvItemDisplay", templateParent) as TreeView;
                            if (treeView != null)
                            {
                                dialogHost = dataTemplate.FindName("dialogBoxEditQty", templateParent) as DialogHost;
                                dialogHost.IsOpen = true;
                            }

                        }

                    }
                }
        }

和树视图

  private void TvItemDisplay_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        ListViewItem listViewItem = (ListViewItem)(LvItemDisplay.ItemContainerGenerator.ContainerFromItem(LvItemDisplay.SelectedItem));
        TreeView treeView = null;
        DialogHost dialogHost = null;

            if (listViewItem != null)
            {
               //get the listViewItem's template parent
                ContentPresenter templateParent = GetFrameworkElementByName<ContentPresenter>(listViewItem);

                //get the DataTemplate that treeview in.
                DataTemplate dataTemplate = LvItemDisplay.ItemTemplate;

                if (dataTemplate != null && templateParent != null)
                {
                    treeView = dataTemplate.FindName("TvItemDisplay", templateParent) as TreeView;
                }

                if (treeView != null)
                {
                    dialogHost = dataTemplate.FindName("dialogBoxEditQty", templateParent) as DialogHost;
                    dialogHost.IsOpen = true;
                }               
        }          
    }

save 对于 dialogHost

private void ButtonSave_Click(object sender, RoutedEventArgs e)
    {

        try
        {

            // get the current selected item
            ListViewItem listViewItem = (ListViewItem)(LvItemDisplay.ItemContainerGenerator.ContainerFromItem(LvItemDisplay.SelectedItem));


            DialogHost dialogHost = null;
            if (listViewItem != null)
            {
            .
            .
            .

我想要类似每当用户单击树视图时它也会触发 /click 列表视图后面的列表视图。可能吗?

您可以手动 select ListView 项

TreeView Selection Changed

private void TvItemDisplay_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            LvItemDisplay.SelectionChanged -= LvItemDisplay_SelectionChanged;
            ParentItemSelectionChange(sender, true);         

            // Your code

            ParentItemSelectionChange(sender, false);
            LvItemDisplay.SelectionChanged += LvItemDisplay_SelectionChanged;

        }

Helper Methods

 private FrameworkElement ParentItemSelectionChange(object sender, bool selChange)
        {
            var frameworkElement = sender as FrameworkElement;
            if (frameworkElement != null)
            {
                var item = FindParent<ListViewItem>(frameworkElement);
                if (item != null)
                    item.IsSelected = selChange;
            }
            return frameworkElement;
        }

        public T FindParent<T>(DependencyObject child) where T : DependencyObject
        {
            DependencyObject parentObject = VisualTreeHelper.GetParent(child);
            if (parentObject == null) return null;
            T parent = parentObject as T;
            if (parent != null)
                return parent;
            return FindParent<T>(parentObject);
        }