a·gen·tic a·gil·i·ty

Bug in ObservableCollection?

TL;DR; Explains issues using ObservableCollection with generic types in .NET, why errors occur, and discusses workarounds and limitations when working with custom classes.

Published on
2 minute read
Image
https://nkdagility.com/resources/L9aNTno7QM3
Subscribe

I seam to be having a little problem. Now, this may be me being stupid, but I can’t get an ObservableCollection to work if you pass it a generic type!

For example, consider the following code:

 1Public Class ItemBitCollection(Of TItem)
 2    Inherits ObservableCollection(Of ItemBit(Of TItem))
 3
 4
 5End Class
 6
 7Public Class ItemBit(Of TItem)
 8
 9    Private m_item As TItem
10
11End Class

Now, if you create an instance of ItemBitCollection you will see an error on the IDE regardless of wither you use a custom object type or a String type to initialise it:

Bug in ObservableCollection?

Why does this not work? What is ObservableCollection doing that maybe it should not? Time to get Reflector out…

After some looking at the source I am still none the wiser. Even if you dumb down your classes to the bare minimum you cant pass a generic type into an ObservableCollection.

This is a limitation if you ask me…

Annoying solution:

If you create a fixed class type:

 1Public Class ItemBitCollection(Of TItemBit)
 2    Inherits ObservableCollection(Of TItemBit)
 3
 4End Class
 5
 6Public MustInherit Class ItemBit(Of TItem)
 7
 8    Private m_item As TItem
 9
10End Class
11
12Public Class DefaultItemBit
13    Inherits ItemBit(Of String)
14
15End Class

And then pass that class in it does work:

1Dim o As New ItemBitCollection(Of DefaultItemBit)

Although this is a work around, it causes other problems in my code… Ahh well… worth a try…

Technorati Tags: .NET   WPF

Subscribe

Connect with Martin Hinshelwood

If you've made it this far, it's worth connecting with our principal consultant and coach, Martin Hinshelwood, for a 30-minute 'ask me anything' call.

Our Happy Clients​

We partner with businesses across diverse industries, including finance, insurance, healthcare, pharmaceuticals, technology, engineering, transportation, hospitality, entertainment, legal, government, and military sectors.​

Alignment Healthcare Logo

Alignment Healthcare

MacDonald Humfrey (Automation) Ltd. Logo

MacDonald Humfrey (Automation) Ltd.

DFDS Logo

DFDS

Akaditi Logo

Akaditi

Slaughter and May Logo

Slaughter and May

Capita Secure Information Solutions Ltd Logo

Capita Secure Information Solutions Ltd

YearUp.org Logo

YearUp.org

Healthgrades Logo

Healthgrades

Schlumberger Logo

Schlumberger

Lean SA Logo

Lean SA

Boxit Document Solutions

Brandes Investment Partners L.P. Logo

Brandes Investment Partners L.P.

Flowmaster (a Mentor Graphics Company) Logo

Flowmaster (a Mentor Graphics Company)

Boeing Logo

Boeing

Big Data for Humans Logo

Big Data for Humans

Ericson Logo

Ericson

Xceptor - Process and Data Automation Logo

Xceptor - Process and Data Automation

Cognizant Microsoft Business Group (MBG) Logo

Cognizant Microsoft Business Group (MBG)

Washington Department of Enterprise Services Logo

Washington Department of Enterprise Services

Ghana Police Service Logo

Ghana Police Service

Department of Work and Pensions (UK) Logo

Department of Work and Pensions (UK)

Royal Air Force Logo

Royal Air Force

New Hampshire Supreme Court Logo

New Hampshire Supreme Court

Nottingham County Council Logo

Nottingham County Council

MacDonald Humfrey (Automation) Ltd. Logo

MacDonald Humfrey (Automation) Ltd.

Flowmaster (a Mentor Graphics Company) Logo

Flowmaster (a Mentor Graphics Company)

Jack Links Logo

Jack Links

NIT A/S

Microsoft Logo

Microsoft

ALS Life Sciences Logo

ALS Life Sciences