WPF MVVM ListView动态绑定数据

2021-01-29 22:13

阅读:848

标签:wrap   height   span   -keep   mode   none   containe   inline   listview   

技术图片技术图片?

界面

技术图片技术图片?

Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    Grid>
        ListView ItemsSource="{Binding Path=PersonCollectionView}">
            ListView.View>
                GridView>
                    GridViewColumn DisplayMemberBinding="{Binding Path=Name}">
                        GridViewColumnHeader Command="{Binding Path=SortCommand}" 
                                              CommandParameter="Name">姓名GridViewColumnHeader>
                    GridViewColumn>
                    GridViewColumn DisplayMemberBinding="{Binding Path=Age}">
                        GridViewColumnHeader Command="{Binding Path=SortCommand}" 
                                              CommandParameter="Age">年龄GridViewColumnHeader>
                    GridViewColumn>
                GridView>
            ListView.View>
        ListView>
    Grid>
Window>
技术图片

.cs

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainWindowViewModel();
        }
    }
技术图片

 

新建一个 Person类

 public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
技术图片

MainWindowViewModel

 public class MainWindowViewModel
    {
        public MainWindowViewModel()
        {
            personCollection.Add(new Person() { Name = "刘二", Age = 17 });
            personCollection.Add(new Person() { Name = "张三", Age = 18 });
            personCollection.Add(new Person() { Name = "李四", Age = 17 });
            personCollection.Add(new Person() { Name = "王五", Age = 19 });
            personCollection.Add(new Person() { Name = "周六", Age = 18 });
            personCollection.Add(new Person() { Name = "胡二", Age = 16 });
            personCollection.Add(new Person() { Name = "黄七", Age = 14 });
            personCollection.Add(new Person() { Name = "朱八", Age = 15 });
            personCollection.Add(new Person() { Name = "周四", Age = 13 });
            this.SortCommand = new DelegateCommandstring>(this.Sort);
        }

        private ObservableCollection personCollection = new ObservableCollection();

        private ICollectionView personCollectionView;
        public ICollectionView PersonCollectionView
        {
            get
            {
                if (personCollectionView == null)
                {
                    personCollectionView = CollectionViewSource.GetDefaultView(personCollection);
                }
                return personCollectionView;
            }
        }

        public DelegateCommandstring> SortCommand { get; private set; }

        private void Sort(string obj)
        {
            if (PersonCollectionView.SortDescriptions.Count > 0 &&
                PersonCollectionView.SortDescriptions[0].PropertyName == obj &&
                PersonCollectionView.SortDescriptions[0].Direction == ListSortDirection.Ascending)
            {
                PersonCollectionView.SortDescriptions.Clear();
                PersonCollectionView.SortDescriptions.Add(new SortDescription(obj, ListSortDirection.Descending));
            }
            else
            {
                PersonCollectionView.SortDescriptions.Clear();
                PersonCollectionView.SortDescriptions.Add(new SortDescription(obj, ListSortDirection.Ascending));
            }
        }
    }
技术图片

效果

技术图片技术图片?

WPF MVVM ListView动态绑定数据

标签:wrap   height   span   -keep   mode   none   containe   inline   listview   

原文地址:https://www.cnblogs.com/CityOfThousandFires/p/11682088.html


评论


亲,登录后才可以留言!