Практика MVVM предполагает, что ничто вне вашего View не должно иметь ссылки на части вашего View - т.е. вы не должны писать в ваш TextBox где-либо, кроме как внутри вашего View. Ничто за пределами View не должно знать напрямую о TextBox (или любом другом элементе управления).
В настоящее время в вашей ViewModel есть ссылка на TextBox (ImportConsole), и я не уверен, как это скомпилируется .
Что вы хотите сделать, так это чтобы ConsoleOutputStream и ViewModel имели дело только со строками (данными), а не с элементами управления TextBox.
Вы можете связать данные строкой, представляющей все содержимое TextBox. но это, вероятно, не будет работать хорошо (хотя в этом нет ничего плохого - производительность может и не быть проблемой).
В качестве альтернативы, вы можете вызвать событие из вашей ViewModel и из вашего ConsoleOutputStream, которое сигнализирует о новой строке текст, который был получен. View может прослушивать это событие (в выделенном фрагменте кода - да, это прекрасно) и добавлять текст в TextBox.
ConsoleOutputStream вызывает событие, которое перехватывается ViewModel. Аргументы события содержат новую строку для добавления. ViewModel вызывает то же событие, которое перехватывается представлением, а представление добавляет текст в TextBox.
Это означает, что вы можете модульно протестировать ваши ViewModel и ConsoleOutputStream в изоляции от вашего View, который одна из основных целей MVVM.
Еще одна альтернатива - использовать ListBox, который привязан к данным для ObservableCollection строк, которые добавляются при получении данных. Это вообще не требует никакого кода (хотя, опять же, само по себе это не должно быть строгой целью при использовании MVVM).