public void BindCommandToObjectWithEventCommandIsArgumentNull() { var vm = new CommandBindingViewModel(); var view = new CommandBindingView { ViewModel = vm }; var invokeCount = 0; vm.Command2.Subscribe(_ => invokeCount++); var btn = new Button(); var cmd = (btn as ICommand) !; var sub = new Subject <object>(); Assert.Throws <TargetInvocationException>(() => { var disp = CreatesCommandBinding.BindCommandToObject(cmd, view, sub, "PropertyChanged"); view.Command2.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) { RoutedEvent = UIElement.MouseUpEvent }); disp.Dispose(); view.Command2.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) { RoutedEvent = UIElement.MouseUpEvent }); }); Assert.Equal(0, invokeCount); }
public void BindCommandToObjectTargetIsNull() { var vm = new CommandBindingViewModel(); var view = new CommandBindingView { ViewModel = vm }; var invokeCount = 0; vm.Command2.Subscribe(_ => invokeCount++); var sub = new Subject <object>(); Assert.Throws <Exception>(() => { var disp = CreatesCommandBinding.BindCommandToObject(vm.Command2, true, sub); view.Command2.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) { RoutedEvent = UIElement.MouseUpEvent }); disp.Dispose(); view.Command2.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) { RoutedEvent = UIElement.MouseUpEvent }); }); Assert.Equal(0, invokeCount); }
private static IDisposable BindCommandInternal <TView, TProp, TParam>( IObservable <TProp> source, TView view, Expression controlExpression, IObservable <TParam> withParameter, string?toEvent) where TView : class, IViewFor where TProp : ICommand { var disposable = Disposable.Empty; var bindInfo = source.CombineLatest( view.SubscribeToExpressionChain <TView, object?>(controlExpression, false, false, RxApp.SuppressViewCommandBindingMessage).Select(x => x.GetValue()), (val, host) => new { val, host }); var propSub = bindInfo .Subscribe(x => { if (x.host is null) { return; } disposable.Dispose(); if (x is null) { disposable = Disposable.Empty; return; } disposable = !string.IsNullOrEmpty(toEvent) ? CreatesCommandBinding.BindCommandToObject(x.val, x.host, withParameter.Select(y => (object)y !), toEvent) : CreatesCommandBinding.BindCommandToObject(x.val, x.host, withParameter.Select(y => (object)y !)); }); return(Disposable.Create(() => { propSub.Dispose(); disposable.Dispose(); })); }