WPF 绑定集合 根据集合个数改变样式 INotifyCollectionChanged

问题:当前ListBox Items 绑定 集合数据源ListA时候;ListA集合数据源中存在另外一个集合ListB,当更改或往ListB集合中添加数据的时候,通知改变?

实体类继承 INotifyCollectionChanged 即可实现:

BaseViewModel:

public class BaseViewModel : INotifyPropertyChanged, INotifyCollectionChanged, IDisposable
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public event NotifyCollectionChangedEventHandler CollectionChanged;

        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            if (CollectionChanged != null)
            {
                CollectionChanged(this, e);
            }
        }

        public void Dispose()
        {
            this.OnDispose();
        }

        protected void OnDispose() { }

        public void OnCollectionChanged()
        {
        }
    }

ViewModel:

public class ViewModel : BaseViewModel
    {
        private List<Person> _lp = null;
        private RelayCommand _addCommand, _removeCommand;

        public ViewModel()
        {
            LP = new List<Person>();
            LP.Add(new Person(1, "aaa"));
            LP.Add(new Person(2, "bbb"));
        }

        public List<Person> LP
        {
            get { return _lp; }
            set { _lp = value; }
        }

        public ICommand AddCommand
        {
            get
            {
                if (_addCommand == null)
                { _addCommand = new RelayCommand(param => this.Add(), param => this.CanAdd); }
                return _addCommand;
            }
        }

        public bool CanAdd
        { get { return true; } }

        public void Add()
        {
            Person ps = new Person(3, "ccc");
            LP.Add(ps);
            CollectionChanged += new NotifyCollectionChangedEventHandler(List_CollectionChanged);
            OnPropertyChanged("LP");
            OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, LP[0], 0));
        }

        public ICommand RemoveCommand
        {
            get
            {
                if (_removeCommand == null)
                { _removeCommand = new RelayCommand(param => this.Remove(), param => this.CanRemove); }
                return _removeCommand;
            }
        }

        public bool CanRemove
        { get { return true; } }

        public void Remove()
        {
            LP.RemoveAt(0);
            CollectionChanged += new NotifyCollectionChangedEventHandler(List_CollectionChanged);
            OnPropertyChanged("LP");
            OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, LP[0], 0));
        }

        private void List_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            // ??????????
        }
    }

完美解决!!

https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/1b55492b-e9ca-4610-a40d-107d64c8ea9f/inotifycollectionchanged-on-listt

时间: 2024-10-12 03:49:30

WPF 绑定集合 根据集合个数改变样式 INotifyCollectionChanged的相关文章

WPF绑定到集合

什么是集合视图? 集合视图是位于绑定源集合顶部的一层,您可以通过它使用排序.筛选和分组查询来导航和显示源集合,而无需更改基础源集合本身.集合视图还维护着一个指向集合中的当前项的指针.如果源集合实现了 INotifyCollectionChanged 接口,则CollectionChanged 事件引发的更改将传播到视图. 如果将控件直接绑定到集合,则 WPF 会绑定到其默认视图.此默认视图由直接到同一集合的所有绑定共享,因此一个绑定控件或代码对默认视图所做的更改(如排序或对当前项指针的更改)会反

WPF ListView绑定基础数据类型集合

ListView中前台数据源绑定基础数据类型集合时没有Path名称,例如直接绑定List<string>,List<int>,BingdingList<string>等,此时直接使用{Bingding Path=.}即可 <ListView.View> <GridView> <GridViewColumn Header="HeaderName" > <GridViewColumn.CellTemplate&g

poj 1611 求0号结点所在集合的元素个数

求0号结点所在集合的元素个数 Sample Input 100 42 1 25 10 13 11 12 142 0 12 99 2200 21 55 1 2 3 4 51 00 0Sample Output 411 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <cmath> 6 # inc

HDU 5101 Select(不同集合的两个数大于k的方案数)

Select Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1422    Accepted Submission(s): 395 Problem Description One day, Dudu, the most clever boy, heard of ACM/ICPC, which is a very interesting

求集合中选一个数与当前值进行位运算的max

求集合中选一个数与当前值进行位运算的max 这是一个听来的神仙东西. 先确定一下值域把,大概\(2^{16}\),再大点也可以,但是这里就只是写写,所以无所谓啦. 我们先看看如果暴力求怎么做,位运算需要给定\(01/10,00,11\)的关系,总共\(8\)种. 如果是暴力的话,我们的方法有两种, 第一种是比较喜闻乐见的, 我们对于当前数\(x\),暴力计算所有存在的数\(a_i\)中,\(x\oplus a_i\)的最大值,这样的复杂度是\(O(2^{16})\)的. 另外一种也是不难考虑到的

WPF Xaml中创建集合

原文:WPF Xaml中创建集合 首先在xaml中创建集合是一个不可取的方法. 本方法仅作为xaml的学习. 本文略微无聊,主要是编写的东西都是老玩意. 首先是定义一个类,作为你要加载集合的模型. 结构如下 internal class Student { public string Name { get; set; } public int Age { get; set; } } internal class StudentList:List<Student> { } class Strin

jquery简介之改变样式和动画效果

改变样式 css(name|pro|[,val|fn]) 返回值:String 访问匹配元素的样式属性. 参数 name   String     要访问的属性名称 properties  Map  要设置为样式属性的名/值对 name,value          String, Number      属性名,属性值 name,function(index, value)String,Function  1:属性名  2:此函数返回要设置的属性值.接受两个参数,index为元素在对象集合中的

WPF绑定

WPF绑定使用的源属性必须是依赖项属性,这是因为依赖项属性具有内置的更改通知支持,元素绑定表达式使用了Xaml扩展标记,WPF绑定一个控件是使用Binding.ElementName,绑定非控件对象时使用Source,RelativeSource,DataContext属性(WPF特有,而非XAML),只能绑定对象的共有字段.下边是部分Binding 属性名,完整列表参考 :http://msdn.microsoft.com/zh-cn/library/vstudio/ms750413.aspx

WPF快速入门系列(4)——深入解析WPF绑定

一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信息来设置目标对象的属性.目标属性总是依赖属性.然而,源对象可以是任何内容,可以是一个WPF元素.或ADO.NET数据对象或自定义的数据对象等.下面详细介绍了WPF绑定中的相关知识点. 二.绑定元素对象 2.1 如何实现绑定元素对象 这里首先介绍绑定最简单的情况——绑定元素对象,即数据源是一个WPF元