WPF ListView在树视图中的选择我需要在选择更改事件中获取所有选定的ListView项目(按住CTRL键时)

WPF的新手

这是Xaml代码需要将所有选定的ListView项放入选择更改的事件

我试图与Multiselecttreeview nuget一起使用,但问题是在这种情况下父级和子级都相同。 TreeviewEX也可以这样做。任何帮助都会很棒。

                <Window x:Class="DemoApps.MainWindow"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:local="clr-namespace:DemoApps"
                    mc:Ignorable="d"
                    Title="MainWindow" Height="350" Width="525">
                <Grid>

                    <TreeView x:Name="TreeViewList" Loaded="TreeViewList_Loaded">

                        <TreeView.ItemTemplate>
                            <HierarchicalDataTemplate DataType="{x:Type local:Group}" ItemsSource="{Binding Users}" >
                                <Grid Width="200" Height="auto">
                                    <StackPanel>
                                        <TextBlock Text="{Binding GroupName}"/>
                                    </StackPanel>
                                </Grid>

                                <HierarchicalDataTemplate.ItemTemplate>
                                    <DataTemplate DataType="{x:Type local:User}">
                                        <ListView Selectionmode="Extended" SelectionChanged="ListView_SelectionChanged">
                                            <Grid Width="150" Height="20">
                                                <StackPanel>
                                                    <TextBlock Text="{Binding username}" />
                                                </StackPanel>
                                            </Grid>
                                        </ListView>
                                    </DataTemplate>
                                </HierarchicalDataTemplate.ItemTemplate>
                            </HierarchicalDataTemplate>


                        </TreeView.ItemTemplate>
                        <TreeView.ItemContainerStyle>
                            <Style TargetType="TreeViewItem">

                                <Setter Property="IsSelected" Value="{Binding IsSelected}" />
                                <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
                            </Style>
                        </TreeView.ItemContainerStyle>
                    </TreeView>

                </Grid>
            </Window>

这是我后面的代码

                using System.Collections.ObjectModel;
            using System.ComponentModel;
            using System.Windows;
            using System.Windows.Controls;

            namespace DemoApps
            {
                /// <summary>
                /// Interaction logic for MainWindow.xaml
                /// </summary>
                public partial class MainWindow : Window
                {

                    public ObservableCollection<Group> GroupData { get; set; }
                    public MainWindow()
                    {
                        InitializeComponent();

                        GroupData = GetDummyData();

                    }

                    private ObservableCollection<Group> GetDummyData()
                    {
                        var _group = new ObservableCollection<Group>();

                        for (int i = 0; i < 20; i++)
                        {
                            _group.Add(new Group
                            {

                                GroupName = "Group name" + i,Users = GetDummyUsers(i)

                            });
                        }
                        return _group;
                    }

                    private ObservableCollection<User> GetDummyUsers(int i)
                    {
                        var _user = new ObservableCollection<User>();
                        for (int j = 0; j < 10; j++)
                        {
                            _user.Add(new User
                            {

                                username = "User " + i + "-" + j
                            });

                        }
                        return _user;

                    }

                    private void TreeViewList_Loaded(object sender,RoutedEventArgs e)
                    {
                        TreeViewList.ItemsSource = GroupData;
                    }

                    private void ListView_SelectionChanged(object sender,SelectionChangedEventArgs e)
                    {
                        //Need to get all selected items from List View.
                        //Here i need to get the selected items
                    }
                }

                public class Group : TreeViewItemBase
                {

                    public string GroupName { get; set; }

                    public ObservableCollection<User> Users { get; set; }
                }

                public class User
                {

                    public string username { get; set; }
                }

                public class TreeViewItemBase : INotifyPropertyChanged
                {
                    private bool isSelected;
                    public bool IsSelected
                    {
                        get { return this.isSelected; }
                        set
                        {

                            this.isSelected = value;
                            NotifyPropertyChanged("IsSelected");

                        }
                    }

                    private bool isExpanded;
                    public bool IsExpanded
                    {
                        get { return this.isExpanded; }
                        set
                        {

                            this.isExpanded = value;
                            NotifyPropertyChanged("IsExpanded");
                        }
                    }




                    public event PropertyChangedEventHandler PropertyChanged;

                    public void NotifyPropertyChanged(string propName)
                    {
                        if (this.PropertyChanged != null)
                            this.PropertyChanged(this,new PropertyChangedEventArgs(propName));
                    }

                }
            }

如何使ListView的所有选定项都进入Selection更改事件

dongping303 回答:WPF ListView在树视图中的选择我需要在选择更改事件中获取所有选定的ListView项目(按住CTRL键时)

问题出在下面的数据模板上:

<HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate DataType="{x:Type local:User}">
                        <ListView SelectionMode="Extended" SelectionChanged="ListView_SelectionChanged">
                            <Grid Width="150" Height="20">
                                <StackPanel>
                                    <TextBlock Text="{Binding UserName}" />
                                </StackPanel>
                            </Grid>
                        </ListView>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>

它正在为每个项目创建一个ListView,因此只能选择一个项目。

更改XAML以在ListView中显示所有用户

<Window x:Class="DemoApps.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView x:Name="TreeViewList" Loaded="TreeViewList_Loaded">
            <TreeView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding GroupName}"/>
                        <ListView SelectionMode="Extended" SelectionChanged="ListView_SelectionChanged"
                                  ItemsSource="{Binding Users}">
                        </ListView>
                    </StackPanel>
                </DataTemplate>
            </TreeView.ItemTemplate>
            <TreeView.ItemContainerStyle>
                <Style TargetType="TreeViewItem">

                    <Setter Property="IsSelected" Value="{Binding IsSelected}" />
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
                </Style>
            </TreeView.ItemContainerStyle>
        </TreeView>
    </Grid>
</Window>

使用获取所选项目

private void ListView_SelectionChanged(object sender,SelectionChangedEventArgs e)
        {
            var selectedItems = ((ListView) e.Source).SelectedItems;
        }
本文链接:https://www.f2er.com/2984843.html

大家都在问