public RPlotDeviceVisualComponent(IRPlotManager plotManager, ICommandTarget controller, int instanceId, IVisualComponentContainer<IRPlotDeviceVisualComponent> container, ICoreShell coreShell) { if (plotManager == null) { throw new ArgumentNullException(nameof(plotManager)); } if (container == null) { throw new ArgumentNullException(nameof(container)); } if (coreShell == null) { throw new ArgumentNullException(nameof(coreShell)); } _plotManager = plotManager; _viewModel = new RPlotDeviceViewModel(plotManager, coreShell, instanceId); _shell = coreShell; var control = new RPlotDeviceControl { DataContext = _viewModel, }; _disposableBag = DisposableBag.Create<RPlotDeviceVisualComponent>() .Add(() => control.ContextMenuRequested -= Control_ContextMenuRequested) .Add(() => _viewModel.DeviceNameChanged -= ViewModel_DeviceNameChanged) .Add(() => _viewModel.LocatorModeChanged -= ViewModel_LocatorModeChanged) .Add(() => _viewModel.PlotChanged += ViewModel_PlotChanged) .Add(() => _plotManager.ActiveDeviceChanged += PlotManager_ActiveDeviceChanged); control.ContextMenuRequested += Control_ContextMenuRequested; _viewModel.DeviceNameChanged += ViewModel_DeviceNameChanged; _viewModel.LocatorModeChanged += ViewModel_LocatorModeChanged; _viewModel.PlotChanged += ViewModel_PlotChanged; _plotManager.ActiveDeviceChanged += PlotManager_ActiveDeviceChanged; Control = control; Controller = controller; Container = container; }