Question

I'm writing an application that reads data from a local db and display them in a listbox(I'm working in WPF).

I've a DVD object, where its properties are the columns of the db. This DVD object also implements INotifyPropertyChanged. "MyDVDs" is the table that refers to db. Once created these object, I create a class that inherits from ObservableCollection and takes data from "MyDVDs" in the constructor. However I don't need only to add, remove and update data from the listbox, but I also need to sort and filter them. Here is the code for ObservableCollection:

class ObservableDVD : ObservableCollection<DVD>
{
    private ICollectionView collection;

    public ObservableDVD(MyDVDs e)
    {
        foreach (DVD d in e.DVDs)
        {
            this.Add(d);
        }
        Collection = CollectionViewSource.GetDefaultView(this);
    }

    public ICollectionView Collection
    {
        get { return collection; }
        private set { collection = value; }
    }

}

I wanted to know, this is a good way?? Or can I do better?

In the MainWindow of the project, when Load_Window event fires, I assign the Collection property to listbox.ItemSource(in MainWindow code-behind I declare a private field that obviously refers to an ObservableDVD Object). I have some buttons that allow me to do the operations I tell you before.In the event headler of the buttons, I directly update and modify the ObservableDVD Object, not its property Collection. However, the Collection property also reflects those changes.

Why this behavior occurs? It's ok for me, but I can't understand why it's happens. Is because of the notifications?

Was it helpful?

Solution

The property Collection has a reference to the view of the ObservableDVD. Being a reference means pointing to the same data in memory.

ObservableCollection Class Represents a dynamic data collection that provides notifications when items get added, removed, or when the whole list is refreshed.

OTHER TIPS

The Collection you are specifying is just a "view" of the ObservableDVD collection. Which means that both are really pointing to the same data in the memory, they're not 2 separate things. A "view" can be a subset of items when you apply filters to a collection, for instance.

Otherwise said, your ObservableDVD contains your "Data Table" for the entire dataset while the ICollectionView lets you manipulate which records/objects are visible to the user through custom logic.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top