/// <summary>
        /// Creates a SpaceRecordingWindow and attaches an instance of SpaceRecordingViewModel to it.
        /// </summary>
        /// <param name="selectedSpace">Space to record in.</param>
        /// <param name="project">The current LiveDescribe Project.</param>
        /// <returns>The ViewModel of the Window.</returns>
        public static SpaceRecordingViewModel SpawnSpaceRecordingView(Space selectedSpace, Project project)
        {
            var viewModel = new SpaceRecordingViewModel(selectedSpace, project);
            var view = new SpaceRecordingWindow(viewModel);
            viewModel.DialogResult = view.ShowDialog();

            return viewModel;
        }
        public SpaceRecordingWindow(SpaceRecordingViewModel vm)
        {
            InitializeComponent();

            _viewModel = vm;

            _viewModel.CloseRequested += (sender, args) =>
            {
                DialogResult = true;
                Close();
            };

            _viewModel.RecordingStarted += (sender, args) =>
            {
                SpaceTextBox.Focus();
                SpaceTextBox.IsReadOnly = true;
                _enumerator = _viewModel.SpaceTextTokenizer.Tokens.GetEnumerator();
            };

            _viewModel.RecordingEnded += (sender, args) =>
            {
                SpaceTextBox.Select(0, 0);
                SpaceTextBox.IsReadOnly = false;
            };

            _viewModel.NextWordSelected += (sender, args) =>
            {
                if (_enumerator.MoveNext())
                {
                    var token = _enumerator.Current;
                    SpaceTextBox.Select(token.StartIndex, token.Length);
                }
                else
                {
                    SpaceTextBox.Select(SpaceTextBox.Text.Length - 1, 0);
                }
            };

            DataContext = _viewModel;
        }