public PlayerDeckTrackerView(
            PlayerDeckTrackerViewModel viewModel)
        {
            InitializeComponent();

            Owner = MainWindowView.Window;

            Point?windowLocation = GlobalConfigurationSource.Instance.GetSettings().TrackerWindowLocation;

            if (windowLocation.HasValue)
            {
                Left = windowLocation.Value.X;
                Top  = windowLocation.Value.Y;
            }

            Size?windowSize = GlobalConfigurationSource.Instance.GetSettings().TrackerWindowSize;

            if (windowSize.HasValue)
            {
                Width  = windowSize.Value.Width;
                Height = windowSize.Value.Height;
            }

            DataContext = viewModel;
        }
        void IPlayerDeckTrackerInterface.TrackDeck(
            Models.Client.Decklist decklist)
        {
            Reset();

            IEventDispatcher eventDispatcher = _eventDispatcherFactory.Create();

            _viewModel =
                new PlayerDeckTrackerViewModel(
                    _cardInfoProvider,
                    _configurationSource,
                    eventDispatcher,
                    _viewEventDispatcher,
                    decklist);

            _cancellation = new CancellationTokenSource();

            Task.Run(
                async() =>
            {
                using (IEventStream eventStream = _eventStreamFactory.Create())
                {
                    while (true)
                    {
                        object @event = await eventStream.ReadNext(_cancellation.Token);
                        if (@event == null)
                        {
                            return;
                        }

                        eventDispatcher.DispatchEvent(@event);
                    }
                }
            });

            _view = new PlayerDeckTrackerView(_viewModel);

            _view.Show();
        }