Quantcast
Channel: Silverlight 5 forum
Viewing all articles
Browse latest Browse all 1083

How to receive a notification when an item is removed or added to ItemsSource of datagrid in Silverlight

$
0
0

Hi all, 

I'm creating a custom control (extending a datagrid). I would like to get a notification when items are added or removed from ItemsSource of the datagrid through ViewModel so I could call a certain method. I tried using a dependancy property but I'm only getting notification when ItemsSource is set a new Collection, not when items are added or removed.

So is it possible ? Thanks for any suggestions .. 

Custom Control - 

public class CustomDataGrid : DataGrid
    {
        private List<CheckBox> checkboxes = new List<CheckBox>();
        private CheckBox headerCheckBox;
        public bool EnableSelectionColumn { get; set; }
        public bool EnableOneClickEdit { get; set; }

	private static readonly DependencyProperty ItemsSourceWatcherProperty =
DependencyProperty.Register("ItemsSourceWatcher", typeof(object), typeof(CustomDataGrid), new PropertyMetadata(null, OnItemsSourceWatcherPropertyChanged));

        private static void OnItemsSourceWatcherPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CustomDataGrid source = d as CustomDataGrid;
            if (source != null)
                source.OnItemsSourceWatcherPropertyChanged();
        }

        private void OnItemsSourceWatcherPropertyChanged()
        {
            // code to call when items changes
        }

        public CustomDataGrid()
        {
            if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                return;

           
            Binding b = new Binding("ItemsSource") { Source = this };
            SetBinding(ItemsSourceWatcherProperty, b);
        }

    }

Xaml

<Custom:CustomDataGrid ItemsSource="{Binding Persons, Mode=TwoWay}" EnableSelectionColumn="True" ColumnWidth="*" SelectedItemsInDataGrid="{Binding SelectedItemsTest, Mode=TwoWay}" />

View Model

public class DatagridTest : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        private ObservableCollection<Person> _persons;
        public ObservableCollection<Person> Persons
        {
            get { return _persons; }
            set { _persons = value; RaisePropertyChanged("Persons"); }
        }

        private ObservableCollection<object> _selectedItems;
        public ObservableCollection<object> SelectedItemsTest
        {
            get { return _selectedItems; }
            set { _selectedItems = value; RaisePropertyChanged("SelectedItemsTest"); }
        }
        public ICommand RemoveCommand { get; set; }

        public DatagridTest()
        {
            Persons = new ObservableCollection<Person>()
            {
                new Person("Smith", 24, DateTime.Today),
                new Person("John", 40, DateTime.Today.AddDays(-24)),
                new Person("Doe", 35, DateTime.Today.AddDays(5))
            };

            SelectedItemsTest = new ObservableCollection<object>();

            RemoveCommand = new RelayCommand(Remove);
        }

        private void Remove(object obj)
        {
            //Persons = new ObservableCollection<Person>();
            foreach (var item in SelectedItemsTest)
            {
                if (Persons.Contains((Person) item))
                    Persons.Remove((Person) item);
            }
        }
    }



Viewing all articles
Browse latest Browse all 1083

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>