private void OpponentGridControl_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { // Crappy workaround MVVM -> code behind OpponentViewModel vm = DataContext as OpponentViewModel; if (vm != null) { vm.ClientChanged += OnClientChanged; if (vm.Client != null) { OnClientChanged(null, vm.Client); } } }
private void OnSpecialUsed(int playerId, string playerName, int targetId, string targetName, int specialId, Specials special) { ExecuteOnUIThread.Invoke(() => { OpponentViewModel vm = DataContext as OpponentViewModel; if (vm == null) { return; } if (targetId == vm.PlayerId && special == Specials.Immunity && (vm.Client.IsPlaying || vm.Client.IsSpectator || ClientOptionsViewModel.Instance.DisplayOpponentsFieldEvenWhenNotPlaying)) { SetImmunity(); } }); }
private void OnContinuousSpecialFinished(int playerId, Specials special) { ExecuteOnUIThread.Invoke(() => { OpponentViewModel vm = DataContext as OpponentViewModel; if (vm == null) { return; } if (playerId == vm.PlayerId && special == Specials.Immunity) { ResetImmunity(); } }); }
private void OnRedrawBoard(int playerId, IBoard board) { ExecuteOnUIThread.Invoke(() => { OpponentViewModel vm = DataContext as OpponentViewModel; // <-- this may cause cross-thread exception if (vm == null) { return; } if (playerId == vm.PlayerId && (vm.Client.IsPlaying || vm.Client.IsSpectator || ClientOptionsViewModel.Instance.DisplayOpponentsFieldEvenWhenNotPlaying)) { DrawGrid(board); } }); }