c# – An elegant way to handle Event subscriptions?

If I have a class instance as Property, which has events and changes based on user input (for example, the user selects one from a list), I often find myself doing the following:

public MyClass MySelectedInstance
    get { return mySelectedInstance; }
        if (mySelectedInstance!= null) mySelectedInstance.myEventFired -= DoStuff;
        SetProperty<MyClass >(ref mySelectedInstance, value);
        if (mySelectedInstance!= null) mySelectedInstance.myEventFired += DoStuff;

As far as I understand, it is important to unsubscribe from events, so the GC can destroy objects. However, for single instance it is not the biggest of problems, but imagine MyClass contains a List of objects with events. Now every time the user would change selection, I have to go through the whole list and handle event subscriptions accordingly.

More often than not, if I find my code solutions not elegant enough, there is already a pattern out there to use. So the question is: How to do this kind of stuff?