Non mi piace usare ReadOnlyObservableCollection<T>
come sembra un errore/classe rotta; Preferisco invece un approccio basato sul contratto.
Ecco quello che uso che permette di covarience:
public interface INotifyCollection<T> : ICollection<T>, INotifyCollectionChanged
{
}
public interface IReadOnlyNotifyCollection<out T> : IReadOnlyCollection<T>, INotifyCollectionChanged
{
}
public class NotifyCollection<T> : ObservableCollection<T>, INotifyCollection<T>, IReadOnlyNotifyCollection<T>
{
}
public class Program
{
private static void Main(string[] args)
{
var full = new NotifyCollection<string>();
var readOnlyAccess = (IReadOnlyCollection<string>) full;
var readOnlyNotifyOfChange1 = (IReadOnlyNotifyCollection<string>) full;
//Covarience
var readOnlyListWithChanges = new List<IReadOnlyNotifyCollection<object>>()
{
new NotifyCollection<object>(),
new NotifyCollection<string>(),
};
}
}
fonte
2013-03-18 10:17:33
Benvenuti a StackOverflow e complimenti per la tua prima risposta. Per favore cerca di renderlo più facile da capire - ad es. formattando (Codice, paragrafi separati o stili di lista). Forse un esempio potrebbe aiutare? – Mateng