CollectionChanged sample

前端 未结 2 1765
暖寄归人
暖寄归人 2020-12-19 11:48

Can someone point to an example where CollectionChanged is implemented. I am using wpf mvvm light. I tried to google, didn\'t find anything good enough.

相关标签:
2条回答
  • 2020-12-19 12:34
     public class Person
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
    
        }
        private ObservableCollection<Person> persons = new ObservableCollection<Person>();
    
    
        public MainWindow()
        {
            InitializeComponent();
            dgPerson.ItemsSource = persons;
            persons.CollectionChanged += this.OnCollectionChanged;
        }
    
    
        void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            //Get the sender observable collection
            ObservableCollection<Person> obsSender = sender as ObservableCollection<Person>;
            NotifyCollectionChangedAction action = e.Action;
            if (action == NotifyCollectionChangedAction.Add)
                lblStatus.Content = "New person added";
            if (action == NotifyCollectionChangedAction.Remove)
                lblStatus.Content = "Person deleted";
        }
        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Person p = new Person();
            p.FirstName = txtFname.Text;
            p.LastName = txtLname.Text;
    
            persons.Add(p);
        }
    

    A very simple complete example here

    0 讨论(0)
  • 2020-12-19 12:49
    public ObservableCollection<string> Names { get; set; }
    
    public ViewModel()
    {
       names = new ObservableCollection<string>();
       Names.CollectionChanged += this.OnCollectionChanged;
    }
    
    void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
       //Get the sender observable collection
       ObservableCollection<string> obsSender = sender as ObservableCollection<string>;
    
       List<string> editedOrRemovedItems = new List<string>();
       foreach(string newItem in e.NewItems)
       {
           editedOrRemovedItems.Add(newItem);
       }
    
       foreach(string oldItem in e.OldItems)
       {
           editedOrRemovedItems.Add(oldItem);
       }
    
       //Get the action which raised the collection changed event
       NotifyCollectionChangedAction action = e.Action;
    }
    

    For more information about the NotifyCollectionChangedEventArgs look here.

    EDIT: Because you need a list of added/removed items, I modified the sample code.

    0 讨论(0)
提交回复
热议问题