Попробуйте использовать шаблон MvvM, чтобы в представлении вы могли определить ListBox следующим образом:
<ListBox ItemsSource="{Binding Path=Log, UpdateSourceTrigger=PropertyChanged}"/>
Тогда представление может быть без кода, связанного с источником привязки. В связанной ViewModel вы добавляете что-то вроде этого:
public class ViewModel : ViewModelBase
{
//...
private ObservableCollection<string> p_Log;
/// <summary>
/// A log of a starting process
/// </summary>
public ObservableCollection<string> Log
{
get { return p_Log; }
set
{
base.RaisePropertyChangingEvent("Log");
p_Log.Add(value.ToString());
base.RaisePropertyChangedEvent("Log");
}
}
//....
/// <summary>
/// Initializes this view model.
/// </summary>
/// <param name="mainWindowViewModel">The view model for this application's main window.</param>
private void Initialize(MainWindowViewModel mainWindowViewModel)
{
//...
p_Log = new ObservableCollection<string>();
}
и затем события, определенные в ViewModelBase, будут поддерживать привязку в представлении обновленной без необходимости какого-либо кода позади в представлении каждый раз, когда в наблюдаемую коллекцию p_log добавляется новая строка.