Use out keyword to specify that the type parameter is covariant.
public interface ITreeColumn<T, out TValue> where TValue : Collection<T>
{
// A lot declared in here..
}
public class TreeColumn<T, TValue> : ITreeColumn<T, TValue> where TValue : Collection<T>
{
// A lot happens in here..
}