Search code examples
xamarin.androidportable-class-librarymvvmcross

MvvmCross vNext: ObservableColletion is defined in an assembly that is not referenced


I have got my PCL model to build now, which took a bit of time making plug-ins, however now in my Android UI project I get two errors when building it.

First error is:

The type 'System.Collections.ObjectModel.ObservableCollection`1<T0>' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e,
Retargetable=Yes'.  C:\ENM\Main\src\prod\Mobile\Stakeholder\UI.Android.vNext\Views\LocationsMapView.cs  40  32  UI.Android.vNext

The second error is:

foreach statement cannot operate on variables of type 
'System.Collections.ObjectModel.ObservableCollection`1<BK.EMS.Stakeholder.Model.ViewModels.LocationViewModel>' 
because 'System.Collections.ObjectModel.ObservableCollection`1<BK.EMS.Stakeholder.Model.ViewModels.LocationViewModel>' 
does not contain a public definition for 'GetEnumerator'
C:\ENM\Main\src\prod\Mobile\Stakeholder\UI.Android.vNext\Views\LocationsMapView.cs  40  32  UI.Android.vNext

I have referenced the System.Windows assembly from the System.Windows.Droid project, which is supposed to forward ObservableCollection<>.

The lines where the error occurs:

private void AddLocationOverlays()
{
    if (_itemizedOverlay.Size() > 0) _itemizedOverlay.ClearOverlayItems();
    RunOnUiThread(() =>
    {
        foreach (var location in ViewModel.Locations)
        {
            _itemizedOverlay.AddOverlayItem(location);
        }
        _mapView.Invalidate();
    });
}

The Locations property in my ViewModel looks like this:

public ObservableCollection<LocationViewModel> Locations
{
    get { return _locations; } 
    set
    {
        _locations = value;
        RaisePropertyChanged(() => Locations);
    }
}

Nothing too complicated and works fine in the non-PCL models...

So how do I get around and fix this?


Solution

  • We now have a solution to this problem - see fix from Daniel Plaisted in Portable Class Library strong assembly reference problems in MonoTouch/MonoDroid

    This fix is checked in at https://github.com/slodge/MvvmCross/commit/f6a88048467838e5ac5ca687744dc0b2d1958aa8