Лучший способ реализовать эту функциональность - открыть модель через свойство в ViewModel и связать ListBox с Model.ObservableList.И используйте предложение Джона при добавлении и удалении элементов в этом списке.Это не потребует от вас скопировать значения из списка в наблюдаемую коллекцию.
Таким образом, ваш код viewModel должен иметь значение
public class ViewModel
{
public Model Model { get { return _model; } }
}
Привязка в xaml:
<ListBox ItemsSource=Model.ObservableList/>
где свойство ObservableList возвращает вашу коллекцию ObservableCollection.
Поскольку все элементы пользовательского интерфейса в WPF имеют привязку к потоку (к потоку Dispatcher), любые обновления пользовательского интерфейса следует маршалировать с помощью Dispatcher.Вы можете сортировать вызовы через Dispatcher, используя Dispatcher.Invoke.В этом случае ваши view, viewModel и Model находятся в потоке Dispatcher, поэтому любой вызов для обновления пользовательского интерфейса через viewModel или Model потребует от вас вызова Dispatcher.Invoke.