regarding ObservableCollection in c#

2019-09-23 01:25发布

i found a piece of code that use ObservableCollection but they can use list or any other collection related classes. can anyone tell me what is the benifit of using ObservableCollection.

ObservableCollection<Employee> empData = new ObservableCollection<Employee> 
        {
            new Employee{Name="Diptimaya Patra", Contact="0000", 
                EmailID="diptimaya.patra@some.com", Country="India"},
            new Employee{Name="Dhananjay Kumar", Contact="00020", 
                EmailID="dhananjay.kumar@some.com", Country="India"},
            new Employee{Name="David Paul", Contact="1230", 
                EmailID="david.paul@some.com", Country="India"},
            new Employee{Name="Christina Joy", Contact="1980", 
                EmailID="christina.joy@some.com", Country="UK"},
            new Employee{Name="Hiro Nakamura", Contact="0000", 
                EmailID="hiro.nakamura@some.com", Country="Japan"},
            new Employee{Name="Angela Patrelli", Contact="0000", 
                EmailID="angela.patrelli@some.com", Country="Japan"},
            new Employee{Name="Zoran White", Contact="0000", 
                EmailID="diptimaya.patra@some.com", Country="Scotland"},
        };

please discuss in detail. thanks

2条回答
够拽才男人
2楼-- · 2019-09-23 02:05

ObservableCollection implements INotifyPropertyChanged. This interface exposes events that allow consumers of your collection to be notified when the contents of the collection change.

This is mainly used when binding in WPF, for example let's say we have an ObservableCollection<string>:

ObservableCollection<string> MyStrings
{
    get
    {
        // return a collection with some strings here
    }
}

and this control in XAML:

<ComboBox ItemsSource="{Binding MyStrings}" />

The ComboBox will show the strings inside your ObservableCollection. So far, this would have worked just fine with a List<string> as well. However, if you now add some strings to the collection, for example:

<Button Click="AddSomeStrings" Content="Click me!" />

private void AddSomeStrings(object sender, RoutedEventArgs e)
{
    this.MyStrings.Add("Additional string!");
}

you will see that the contents of the ComboBox will be immediately updated and the string will be added to the list of options. This is all accomplished using INotifyCollectionChanged.

查看更多
劳资没心,怎么记你
3楼-- · 2019-09-23 02:18

The benefit of ObservableCollection is that it raises the CollectionChanged event every time the collection is changed, and the PropertyChanged event every time one of the properties of the collection is changed.

In a similar way, if you want an object (which is not a collection) to raise an event every time one of its properties change, you should make it implement INotifyPropertyChanged.

查看更多
登录 后发表回答