Isso viola o princípio da substituição de Liskov e, em caso afirmativo, o que devo fazer?

Caso de uso: estou usando modelos de dados para corresponder uma View a um ViewModel. Os modelos de dados funcionam inspecionando o tipo mais derivado do tipo concreto fornecido, e eles não olham para quais interfaces ele fornece, então eu tenho que fazer isso sem interfaces.

Estou simplificando o exemplo aqui e deixando de fora NotifyPropertyChanged, etc., mas no mundo real, um View será vinculado à propriedade Text. Por uma questão de simplicidade, imagine que uma View com um TextBlock se vincule a um ReadOnlyText e uma View com um TextBox se vincule a WritableText.

class ReadOnlyText
{
    private string text = string.Empty;

    public string Text
    {
        get { return text; }
        set
        {
            OnTextSet(value);
        }
    }

    protected virtual void OnTextSet(string value)
    {
        throw new InvalidOperationException("Text is readonly.");
    }

    protected void SetText(string value)
    {
        text = value;
        // in reality we'd NotifyPropertyChanged in here
    }
}

class WritableText : ReadOnlyText
{
    protected override void OnTextSet(string value)
    {
        // call out to business logic here, validation, etc.
        SetText(value);
    }
}

Ao substituir o OnTextSet e alterar seu comportamento, estou violando oLSP? Se sim, qual é a melhor maneira de fazer isso?