private bool Delete()
{
if (Tokens == null) return false;
if (SelectionLength > 0)
{
var index = SelectionStart;
if (!(0 <= index && index + SelectionLength <= Tokens.Count)) return false;
Tokens.RemoveRange(index, SelectionLength);
}
else
{
var index = CaretIndex - 1;
if (!(0 <= index && index < Tokens.Count)) return false;
Tokens.RemoveAt(index);
}
RaisePropertyChanged(() => CanDelete);
return true;
}