WPF MVVM 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 DelegateCommand<string>(this.Sort);
        }

        private ObservableCollection<Person> personCollection = new ObservableCollection<Person>();

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

        public DelegateCommand<string> 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));
            }
        }
    }

效果

?

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

时间: 2024-11-23 16:17:58

WPF MVVM ListView动态绑定数据的相关文章

WPF中为ListView动态绑定数据(可参考)

GridView gv = new GridView(); DataTable dt = fieldManageBLL.GetFieldManage(moduleName); for(int i=0;i<dt.Rows.Count;i++) {     if(i==0)     {         GridViewColumn gvc=new GridViewColumn();         CheckBox cb = new CheckBox();         cb.Checked +=

WPF MVVM从入门到精通8:数据验证

原文:WPF MVVM从入门到精通8:数据验证 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 WPF MVVM从入门到精通4:命令和事件 WPF MVVM从入门到精通5:PasswordBox的绑定 WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定 WPF MVVM从入门到精通7:关闭窗口和打开新窗口 WPF MVVM从入门到精通8:数据验证 完整示例代码下载LoginDemo

A WPF File ListView and ComboBox

源码下载: Download FileListView_Version_2.zip Download FileListView_Version_2_Binaries.zip Download FileListView_Version_2.1.zip The project is now maintained here: http://fsc.codeplex.com/ Introduction I was recently asked to add a 'File Tree Pane' into

WPF MVVM模式的一些理解

/*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模式的理解不足,遇到了很多问题,也绕了很多弯子:网上提供的Mvvm的示例比较简单,实际项目中的需求也各种各样.不过经过几个项目,也有了一些对Mvvm模式的理解: 1. Mvvm是什么,Mvvm是怎么来的?Mvvm模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务

初步探讨WPF的ListView控件(涉及模板、查找子控件)

本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmlns:c="clr-namespace:System.Collections;assembly=mscorlib" 然后代码如下:   <c:ArrayList x:Key="stuList">            <local:Student Id=

深入探讨WPF的ListView控件

接上一篇博客初步探讨WPF的ListView控件(涉及模板.查找子控件)  我们继续探讨ListView的用法      一.实现排序功能 需求是这样的:假如我们把学生的分数放入ListView,当我们单机ListView头部时候实现对按分数的排序,更改Xaml如下: <Window x:Class="ContentDataTemplate.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/p

[译]WPF MVVM 架构 Step By Step(5)(添加actions和INotifyPropertyChanged接口)

原文:[译]WPF MVVM 架构 Step By Step(5)(添加actions和INotifyPropertyChanged接口) 应用不只是包含textboxs和labels,还包含actions,如按钮和鼠标事件等.接下来我们加上一些像按钮这样的UI元素来看MVVM类怎么演变的.与之前的UI相比,这次我们加上一个"Cal Tax"按钮,当我们点击这个依赖于“sales amount”的按钮时,它会计算税费并显示在同窗口内. 为了完成所述的功能,我们先在Model类中添加一个

WPF MVVM 架构 Step By Step(4)(添加bindings - 完全去掉后台代码)

原文:WPF MVVM 架构 Step By Step(4)(添加bindings - 完全去掉后台代码) 之前的改进已经挺棒的,但是我们现在知道了后台代码的问题,那是否可能把后台代码全部去除呢?这时候就该WPF binding 和 commands 来做的事情了. WPF就是以超吊的binding,commans和声明式编程而闻名的.声明式编程意思就是相比于全部用C#代码来写,我们也可以用XAML来表示c#代码.Binding可以帮助我们把2个不同的WPF对象连接起来来发送和接收数据. 你看到

WPF MVVM学习

转自https://my.oschina.net/unpluggedcoder/blog/536301 简介 简单的三层架构示例和 GLUE(胶水)代码问题 第一步:最简单的 MVVM 示例 - 把后台代码移到类中 第二步:添加绑定 - 消灭后台代码 第三步:添加执行动作和"INotifyPropertyChanged"接口 第四步:在 ViewModel 中解耦执行动作 第五步:利用 PRISM WPF MVVM 的视频演示 简介 从我们还是儿童到学习成长为成年人,生命一直都在演变.