protected override void OnStateChange() { if (State == State.SetDefaults) { Name = NinjaTrader.Custom.Resource.NinjaScriptSuperDomColumnVolume; Description = NinjaTrader.Custom.Resource.NinjaScriptSuperDomColumnDescriptionVolume; Buys = new ConcurrentDictionary <double, long>(); BackColor = Application.Current.TryFindResource("brushPriceColumnBackground") as Brush; BarColor = Application.Current.TryFindResource("brushVolumeColumnBackground") as Brush; BuyColor = Brushes.DarkCyan; DefaultWidth = 160; PreviousWidth = -1; DisplayText = false; DisplayType = DisplayType.Volume; ForeColor = Application.Current.TryFindResource("brushVolumeColumnForeground") as Brush; ImmutableBarColor = Application.Current.TryFindResource("immutableBrushVolumeColumnBackground") as Brush; ImmutableForeColor = Application.Current.TryFindResource("immutableBrushVolumeColumnForeground") as Brush; IsDataSeriesRequired = true; LastVolumes = new ConcurrentDictionary <double, long>(); SellColor = Brushes.Crimson; Sells = new ConcurrentDictionary <double, long>(); VolumeType = VolumeType.Standard; } else if (State == State.Configure) { if (UiWrapper != null && PresentationSource.FromVisual(UiWrapper) != null) { Matrix m = PresentationSource.FromVisual(UiWrapper).CompositionTarget.TransformToDevice; double dpiFactor = 1 / m.M11; gridPen = new Pen(Application.Current.TryFindResource("BorderThinBrush") as Brush, 1 * dpiFactor); halfPenWidth = gridPen.Thickness * 0.5; } if (SuperDom.Instrument != null && SuperDom.IsConnected) { BarsPeriod bp = new BarsPeriod { MarketDataType = MarketDataType.Last, BarsPeriodType = BarsPeriodType.Tick, Value = 1 }; SuperDom.Dispatcher.InvokeAsync(() => SuperDom.SetLoadingString()); clearLoadingSent = false; if (BarsRequest != null) { BarsRequest.Update -= OnBarsUpdate; BarsRequest = null; } BarsRequest = new BarsRequest(SuperDom.Instrument, Cbi.Connection.PlaybackConnection != null ? Cbi.Connection.PlaybackConnection.Now : Core.Globals.Now, Cbi.Connection.PlaybackConnection != null ? Cbi.Connection.PlaybackConnection.Now : Core.Globals.Now); BarsRequest.BarsPeriod = bp; BarsRequest.TradingHours = (TradingHoursSerializable.Length == 0 || TradingHours.Get(TradingHoursSerializable) == null) ? SuperDom.Instrument.MasterInstrument.TradingHours : TradingHours.Get(TradingHoursSerializable); BarsRequest.Update += OnBarsUpdate; BarsRequest.Request((request, errorCode, errorMessage) => { // Make sure this isn't a bars callback from another column instance if (request != BarsRequest) { return; } lastMaxIndex = 0; maxVolume = 0; totalBuyVolume = 0; totalLastVolume = 0; totalSellVolume = 0; Sells.Clear(); Buys.Clear(); LastVolumes.Clear(); if (State >= NinjaTrader.NinjaScript.State.Terminated) { return; } if (errorCode == Cbi.ErrorCode.UserAbort) { if (State <= NinjaTrader.NinjaScript.State.Terminated) { if (SuperDom != null && !clearLoadingSent) { SuperDom.Dispatcher.InvokeAsync(() => SuperDom.ClearLoadingString()); clearLoadingSent = true; } } request.Update -= OnBarsUpdate; request.Dispose(); request = null; return; } if (errorCode != Cbi.ErrorCode.NoError) { request.Update -= OnBarsUpdate; request.Dispose(); request = null; if (SuperDom != null && !clearLoadingSent) { SuperDom.Dispatcher.InvokeAsync(() => SuperDom.ClearLoadingString()); clearLoadingSent = true; } } else if (errorCode == Cbi.ErrorCode.NoError) { try { SessionIterator superDomSessionIt = new SessionIterator(request.Bars); bool includesEndTimeStamp = request.Bars.BarsType.IncludesEndTimeStamp(false); if (superDomSessionIt.IsInSession(Cbi.Connection.PlaybackConnection != null ? Cbi.Connection.PlaybackConnection.Now : Core.Globals.Now, includesEndTimeStamp, request.Bars.BarsType.IsIntraday)) { for (int i = 0; i < request.Bars.Count; i++) { DateTime time = request.Bars.BarsSeries.GetTime(i); if ((includesEndTimeStamp && time <= superDomSessionIt.ActualSessionBegin) || (!includesEndTimeStamp && time < superDomSessionIt.ActualSessionBegin)) { continue; } double ask = request.Bars.BarsSeries.GetAsk(i); double bid = request.Bars.BarsSeries.GetBid(i); double close = request.Bars.BarsSeries.GetClose(i); long volume = request.Bars.BarsSeries.GetVolume(i); if (ask != double.MinValue && close >= ask) { Buys.AddOrUpdate(close, volume, (price, oldVolume) => oldVolume + volume); totalBuyVolume += volume; } else if (bid != double.MinValue && close <= bid) { Sells.AddOrUpdate(close, volume, (price, oldVolume) => oldVolume + volume); totalSellVolume += volume; } long newVolume; LastVolumes.AddOrUpdate(close, newVolume = volume, (price, oldVolume) => newVolume = oldVolume + volume); totalLastVolume += volume; if (newVolume > maxVolume) { maxVolume = newVolume; } } lastMaxIndex = request.Bars.Count - 1; // Repaint the column on the SuperDOM OnPropertyChanged(); } } catch { if (State != State.Finalized) // ignore error if Finalized { throw; } } if (SuperDom != null && !clearLoadingSent) { SuperDom.Dispatcher.InvokeAsync(() => SuperDom.ClearLoadingString()); clearLoadingSent = true; } } }); } } else if (State == State.Active) { if (!DisplayText) { WeakEventManager <System.Windows.Controls.Panel, MouseEventArgs> .AddHandler(UiWrapper, "MouseMove", OnMouseMove); WeakEventManager <System.Windows.Controls.Panel, MouseEventArgs> .AddHandler(UiWrapper, "MouseEnter", OnMouseEnter); WeakEventManager <System.Windows.Controls.Panel, MouseEventArgs> .AddHandler(UiWrapper, "MouseLeave", OnMouseLeave); mouseEventsSubscribed = true; } } else if (State == State.Terminated) { if (BarsRequest != null) { BarsRequest.Update -= OnBarsUpdate; BarsRequest.Dispose(); } BarsRequest = null; if (SuperDom != null && !clearLoadingSent) { SuperDom.Dispatcher.InvokeAsync(() => SuperDom.ClearLoadingString()); clearLoadingSent = true; } if (!DisplayText && mouseEventsSubscribed) { WeakEventManager <System.Windows.Controls.Panel, MouseEventArgs> .RemoveHandler(UiWrapper, "MouseMove", OnMouseMove); WeakEventManager <System.Windows.Controls.Panel, MouseEventArgs> .RemoveHandler(UiWrapper, "MouseEnter", OnMouseEnter); WeakEventManager <System.Windows.Controls.Panel, MouseEventArgs> .RemoveHandler(UiWrapper, "MouseLeave", OnMouseLeave); mouseEventsSubscribed = false; } lastMaxIndex = 0; maxVolume = 0; totalBuyVolume = 0; totalLastVolume = 0; totalSellVolume = 0; Sells.Clear(); Buys.Clear(); LastVolumes.Clear(); } }
public static void AddChangedHandler(EventHandler <EventArgs> handler) { WeakEventManager <ProjectInfoService, EventArgs> .AddHandler(Instance, nameof(Changed), handler); }
public void AddHandlerWithNullEventHandlerThrowsException() { var wem = new WeakEventManager(); Assert.Throws <ArgumentNullException>(() => wem.AddEventHandler(null, "test")); }
public FormularioPreciosViewModel() { initializeData(); WeakEventManager <FormularioPreciosViewModel, PropertyChangedEventArgs> .AddHandler(this, "PropertyChanged", this_PropertyChanged); }
public SyncStatusChildViewModel() : base() { WeakEventManager <SUPSyncListener, PropertyChangedEventArgs> .AddHandler(_listener, "PropertyChanged", SyncListener_PropertyChanged); }
public void RemoveHandlerWithEmptyEventNameThrowsException() { var wem = new WeakEventManager(); Assert.Throws <ArgumentNullException>(() => wem.RemoveEventHandler((sender, args) => { }, "")); }
public void SubscribeWithWeakEventManager(EventSource source) { WeakEventManager <EventSource, SignalArgs> .AddHandler(source, nameof(source.Signal), Respond); }
public TrStringFormatConverter(string textId) { TextId = textId; WeakEventManager <Loc, CurrentLanguageChangedEventArgs> .AddHandler(Loc.Instance, nameof(Loc.Instance.CurrentLanguageChanged), CurrentLanguageChanged); }
public OpenQueueView() { InitializeComponent(); WeakEventManager <OpenQueueView, RoutedEventArgs> .AddHandler(this, "Loaded", OpenQueueView_Loaded); }
public ImageSearchViewModel() { NrColumns = 4; SearchCommand = new AsyncCommand <int>(async(imageOffset) => { try { if (imageOffset == 0) { CurrentQuery = new ImageSearchQuery(this); } SearchCommand.IsExecutable = false; await doSearch(CurrentQuery, imageOffset); } catch (Exception e) { MessageBox.Show("Image search error\n\n" + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } finally { SearchCommand.IsExecutable = true; } }); ViewCommand = new Command <SelectableMediaItem>((selectableItem) => { ImageResultItem item = (ImageResultItem)selectableItem.Item; if (item.ImageInfo.ContentType.Equals("image/animatedgif")) { Shell.ShellViewModel.navigateToVideoView(item); } else { Shell.ShellViewModel.navigateToImageView(item); } }); ViewSourceCommand = new Command <SelectableMediaItem>((selectableItem) => { ImageResultItem item = (ImageResultItem)selectableItem.Item; Process.Start(item.ImageInfo.SourceUrl); }); SelectAllCommand = new Command(() => { MediaStateCollectionView.selectAll(); }, false); DeselectAllCommand = new Command(() => { MediaStateCollectionView.deselectAll(); }); CloseCommand = new Command(() => { OnClosingRequest(); }); DownloadCommand = new AsyncCommand <SelectableMediaItem>(async(selectableItem) => { List <MediaItem> items = MediaStateCollectionView.getSelectedItems(); if (items.Count == 0) { items.Add(selectableItem.Item); } String outputPath = null; switch (ImageSearchPlugin.Properties.Settings.Default.ImageSaveMode) { case MediaViewer.Infrastructure.Constants.SaveLocation.Current: { outputPath = MediaFileWatcher.Instance.Path; break; } case MediaViewer.Infrastructure.Constants.SaveLocation.Ask: { DirectoryPickerView directoryPicker = new DirectoryPickerView(); directoryPicker.DirectoryPickerViewModel.InfoString = "Select Output Directory"; directoryPicker.DirectoryPickerViewModel.SelectedPath = MediaFileWatcher.Instance.Path; if (directoryPicker.ShowDialog() == false) { return; } outputPath = directoryPicker.DirectoryPickerViewModel.SelectedPath; break; } case MediaViewer.Infrastructure.Constants.SaveLocation.Fixed: { outputPath = ImageSearchPlugin.Properties.Settings.Default.FixedDownloadPath; break; } default: break; } CancellableOperationProgressView progressView = new CancellableOperationProgressView(); DownloadProgressViewModel vm = new DownloadProgressViewModel(); progressView.DataContext = vm; progressView.Show(); vm.OkCommand.IsExecutable = false; vm.CancelCommand.IsExecutable = true; try { await Task.Factory.StartNew(() => { vm.startDownload(outputPath, items); }, vm.CancellationToken); } catch (Exception) { } vm.OkCommand.IsExecutable = true; vm.CancelCommand.IsExecutable = false; }); SettingsViewModel = (ImageSearchSettingsViewModel)ServiceLocator.Current.GetInstance(typeof(ImageSearchSettingsViewModel)); Size = new ListCollectionView(size); Size.MoveCurrentTo(Settings.Default.Size); SafeSearch = new ListCollectionView(safeSearch); SafeSearch.MoveCurrentTo(Settings.Default.SafeSearch); Layout = new ListCollectionView(layout); Layout.MoveCurrentTo(Settings.Default.Layout); Type = new ListCollectionView(type); Type.MoveCurrentTo(Settings.Default.Type); People = new ListCollectionView(people); People.MoveCurrentTo(Settings.Default.People); Color = new ListCollectionView(color); Color.MoveCurrentTo(Settings.Default.Color); GeoTag = new GeoTagCoordinatePair(); MediaState = new MediaState(); MediaStateCollectionView = new ImageResultCollectionView(MediaState); MediaStateCollectionView.MediaState.MediaStateType = MediaStateType.SearchResult; WeakEventManager <MediaLockedCollection, EventArgs> .AddHandler(MediaStateCollectionView.MediaState.UIMediaCollection, "IsLoadingChanged", mediaCollection_IsLoadingChanged); }
public PutMessageView() { InitializeComponent(); WeakEventManager <PutMessageView, RoutedEventArgs> .AddHandler(this, "Loaded", PutMessageView_Loaded); }
public Window2(Button button) { WeakEventManager <Button, EventArgs> .AddHandler(button, "Clicked", ButtonOnClicked); }
private void dettachEvents() { WeakEventManager <SUPModelBase <T>, PropertyChangedEventArgs> .RemoveHandler(this, "PropertyChanged", saveToSUPEntity); }
public Window(Button button) { //button.Clicked += ButtonOnClicked; WeakEventManager <Button, EventArgs> .AddHandler(button, "Clicked", ButtonOnClicked); }
public TrStringFormatMultiValuesConverter() { WeakEventManager <Loc, CurrentLanguageChangedEventArgs> .AddHandler(Loc.Instance, nameof(Loc.Instance.CurrentLanguageChanged), CurrentLanguageChanged); }
public TestItemViewModel(TestItemViewModel parent, TestItem testItem) : base(parent, testItem, CreateViewModel) { Owner = (this.Crawl(p => p.Parent).LastOrDefault() ?? this) as TestSolutionViewModel; WeakEventManager <TestSolutionViewModel, EventArgs <TestItemViewModel> > .AddHandler(Owner, nameof(TestSolutionViewModel.AutoCoverTargetUpdated), OnAutoCoverTargetUpdated); }
public void RemoveHandlerWithNullEventHandlerThrowsException() { var wem = new WeakEventManager(); Assert.Throws <ArgumentNullException>(() => wem.RemoveEventHandler("test", null)); }
public UnloadedWeakEventListener(FrameworkElement source, BehaviorCollectionEx collection) { this.collection = collection; WeakEventManager <FrameworkElement, EventArgs> .AddHandler(source, "Unloaded", OnEvent); }
public static void SubscribeLanguageChanged(this ILocalizationService localizationService, EventHandler <EventArgs> handler) { WeakEventManager <ILocalizationService, EventArgs> .AddHandler(localizationService, nameof(ILocalizationService.LanguageChanged), handler); }
public override void Cleanup() { base.Cleanup(); WeakEventManager <SUPSyncListener, PropertyChangedEventArgs> .RemoveHandler(_listener, "PropertyChanged", SyncListener_PropertyChanged); }
/// <summary> /// Default Constructor /// </summary> public LocBinding() { WeakEventManager <Loc, CurrentLanguageChangedEventArgs> .AddHandler(Loc.Instance, nameof(Loc.Instance.CurrentLanguageChanged), CurrentLanguageChanged); }
public TestEventSource() { _weakEventManager = new WeakEventManager(); }
/// <summary> /// Constructor /// </summary> /// <param name="path">The path to the binding source property.</param> public LocBinding(PropertyPath path) { WeakEventManager <Loc, CurrentLanguageChangedEventArgs> .AddHandler(Loc.Instance, nameof(Loc.Instance.CurrentLanguageChanged), CurrentLanguageChanged); Path = path; }
public void AddHandlerWithNullEventNameThrowsException() { var wem = new WeakEventManager(); Assert.Throws <ArgumentNullException>(() => wem.AddEventHandler((sender, args) => { }, null)); }
public BindingProxy() { WeakEventManager <LanguageContext, EventArgs> .AddHandler(LanguageContext.Instance, nameof(LanguageContext.CultureChanged), LanguageChanged); }
public override void Cleanup() { base.Cleanup(); WeakEventManager <FormularioPreciosViewModel, PropertyChangedEventArgs> .RemoveHandler(this, "PropertyChanged", this_PropertyChanged); }
private static void Main(string[] args) { Console.WriteLine("------"); // // MailManager mm = new MailManager(); // // Fax fax = new Fax(mm); // CellPhone pager = new CellPhone(mm); // // mm.SimulateArrivingMsg("Google", "Me", "CV", "how are you"); // // fax.Unregister(mm); // // mm.SimulateArrivingMsg("Amdaris", "Me", "ID", "check your account"); /////////////////// // // Construct a MailPublisher object // MailManager mm2 = new MailManager(); // // // Construct a Fax object // Fax fax2 = new Fax(mm2); // // // Construct a CellPhone object // CellPhone phone2 = new CellPhone(mm2); // // //Register weak events by WeakEventManager // // WeakEventManager<MailManager, NewMailEventArgs>. // AddHandler(mm2, "SimulateArrivingMsg", fax2.FaxMsg); // // //mm2.SimulateArrivingMsg("Google", "Me", "CV", "how are you"); // // //fax2.Unregister(mm2); // // WeakEventManager<MailManager, NewMailEventArgs>. // AddHandler(mm2, "NewMail", phone2.PhoneMsg); // // // //mm2.SimulateArrivingMsg("Google", "Me", "CV", "how are you"); // // // Unregister weak event for the Fax object by WeakEventManager // WeakEventManager<MailManager, NewMailEventArgs>.RemoveHandler(mm2, "NewMail", fax2.FaxMsg); // Construct a MailPublisher object MailManager mm = new MailManager(); // Construct a Fax object Fax fax = new Fax(); // Construct a CellPhone object CellPhone phone = new CellPhone(); //Register weak events by WeakEventManager fax Console.WriteLine("========= fax.msg============="); WeakEventManager <MailManager, NewMailEventArgs> . AddHandler(mm, "NewMail", fax.FaxMsg); mm.SimulateArrivingMsg("Google", "Me", "CV", "how are you"); Console.WriteLine("============================="); Console.WriteLine("========= fax.msg, phone.msg============="); WeakEventManager <MailManager, NewMailEventArgs> . AddHandler(mm, "NewMail", phone.PhoneMsg); mm.SimulateArrivingMsg("Amdaris", "Me", "ID", "check your account"); Console.WriteLine("============================="); // Unregister weak event for the Fax object by WeakEventManager WeakEventManager <MailManager, NewMailEventArgs> . RemoveHandler(mm, "NewMail", fax.FaxMsg); WeakEventManager <MailManager, NewMailEventArgs> . RemoveHandler(mm, "NewMail", phone.PhoneMsg); Console.ReadKey(); }
public void AddHandler(EventHandler <EventArgs> handler) { WeakEventManager <ViewModel, EventArgs> .AddHandler(this, nameof(this.ViewChanged), handler); }
protected override void OnStateChange() { if (State == NinjaTrader.NinjaScript.State.SetDefaults) { Name = NinjaTrader.Custom.Resource.NinjaScriptSuperDomColumnApq; Description = NinjaTrader.Custom.Resource.NinjaScriptSuperDomColumnDescriptionApq; DefaultWidth = 100; PreviousWidth = -1; IsDataSeriesRequired = false; BackColor = Application.Current.TryFindResource("brushPriceColumnBackground") as Brush; ForeColor = Application.Current.TryFindResource("FontControlBrush") as SolidColorBrush; priceApqValues = new ConcurrentDictionary <double, long>(); priceToOrderApqMap = new ConcurrentDictionary <double, ConcurrentDictionary <Cbi.Order, long> >(); } else if (State == NinjaTrader.NinjaScript.State.Configure) { if (UiWrapper != null && PresentationSource.FromVisual(UiWrapper) != null) { Matrix m = PresentationSource.FromVisual(UiWrapper).CompositionTarget.TransformToDevice; double dpiFactor = 1 / m.M11; gridPen = new Pen(Application.Current.TryFindResource("BorderThinBrush") as Brush, 1 * dpiFactor); halfPenWidth = gridPen.Thickness * 0.5; } } else if (State == NinjaTrader.NinjaScript.State.Active) { if (!eventsSubscribed && SuperDom.MarketDepth != null) { WeakEventManager <Data.MarketDepth <LadderRow>, Data.MarketDepthEventArgs> .AddHandler(SuperDom.MarketDepth, "Update", OnMarketDepthUpdate); WeakEventManager <SuperDomViewModel, EventArgs> .AddHandler(SuperDom, "SelectedAccountChanged", OnSelectedAccountChanged); WeakEventManager <SuperDomViewModel, EventArgs> .AddHandler(SuperDom, "SelectedAtmStrategyChanged", OnSelectedAtmStrategyChanged); WeakEventManager <SuperDomViewModel, EventArgs> .AddHandler(SuperDom, "SelectedAtmStrategySelectionModeChanged", OnSelectedAtmStrategySelectionModeChanged); eventsSubscribed = true; } justConnected = true; } else if (State == NinjaTrader.NinjaScript.State.Terminated) { if (SuperDom == null) { return; } if (SuperDom.MarketDepth != null && eventsSubscribed) { WeakEventManager <Data.MarketDepth <LadderRow>, Data.MarketDepthEventArgs> .RemoveHandler(SuperDom.MarketDepth, "Update", OnMarketDepthUpdate); WeakEventManager <SuperDomViewModel, EventArgs> .RemoveHandler(SuperDom, "SelectedAccountChanged", OnSelectedAccountChanged); WeakEventManager <SuperDomViewModel, EventArgs> .RemoveHandler(SuperDom, "SelectedAtmStrategyChanged", OnSelectedAtmStrategyChanged); WeakEventManager <SuperDomViewModel, EventArgs> .RemoveHandler(SuperDom, "SelectedAtmStrategySelectionModeChanged", OnSelectedAtmStrategySelectionModeChanged); eventsSubscribed = false; } } }
private void Application_Startup(object sender, StartupEventArgs e) { try { // Set shutdown mode here (and reset further below) to enable showing custom dialogs (messageboxes) // durring start-up without shutting down application when the custom dialogs (messagebox) closes ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; } catch { } var settings = GetService <ISettingsManager>(); // add the default themes var appearance = GetService <IAppearanceManager>(); AppLifeCycleViewModel lifeCycle = null; try { lifeCycle = new AppLifeCycleViewModel(); lifeCycle.LoadConfigOnAppStartup(settings, appearance); appearance.SetTheme(settings.Themes , settings.Options.GetOptionValue <string>("Appearance", "ThemeDisplayName") , ThemeViewModel.GetCurrentAccentColor(settings)); // Construct Application ViewMOdel and mainWindow _appVM = new ViewModels.AppViewModel(lifeCycle); _appVM.SetSessionData(settings.SessionData); // Customize services specific items for this application // Program message box service for Modern UI (Metro Light and Dark) // var msgBox = GetService<IMessageBoxService>(); // msgBox.Style = MsgBoxStyle.WPFThemed; } catch (Exception exp) { Debug.WriteLine(exp.Message); } try { var selectedLanguage = settings.Options.GetOptionValue <string>("Options", "LanguageSelected"); Thread.CurrentThread.CurrentCulture = new CultureInfo(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); } catch { } // Create the optional appearance viewmodel and apply // current settings to start-up with correct colors etc... ////var appearSettings = new AppearanceViewModel(settings.Themes); ////appearSettings.ApplyOptionsFromModel(settings.Options); // Initialize WPF theming and friends ... _appVM.InitForMainWindow(GetService <IAppearanceManager>() , settings.Options.GetOptionValue <string>("Appearance", "ThemeDisplayName")); Application.Current.MainWindow = _mainWindow = new MainWindow(); MainWindow.DataContext = _appVM; AppCore.CreateAppDataFolder(); if (MainWindow != null && _appVM != null) { // and show it to the user ... //MainWindow.Loaded += MainWindow_Loaded; WeakEventManager <FrameworkElement, RoutedEventArgs> .AddHandler(MainWindow, "Loaded", MainWindow_Loaded); //MainWindow.Closing += OnClosing; WeakEventManager <Window, CancelEventArgs> .AddHandler(MainWindow, "Closing", OnClosing); // When the ViewModel asks to be closed, close the window. // Source: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx WeakEventManager <Window, EventArgs> .AddHandler(MainWindow, "Closed", delegate { // Save session data and close application OnClosed(_appVM, _mainWindow); var dispose = _appVM as IDisposable; if (dispose != null) { dispose.Dispose(); } _mainWindow.DataContext = null; _appVM = null; _mainWindow = null; }); ConstructMainWindowSession(_appVM, _mainWindow); MainWindow.Show(); } }
public void RemoveHandlerShouldRemoveAddedHandler() { var target = new WeakEventManager<EventHandler, EventArgs>(); EventHandler handler = DefaultAction.None; target.AddHandler( handler ); Assert.True( target.RemoveHandler( handler ) ); }
public void RaiseEventShouldInvokeAddedHandler() { var raised = false; EventHandler handler = ( s, e ) => raised = true; var target = new WeakEventManager<EventHandler, EventArgs>(); target.AddHandler( handler ); target.RaiseEvent( this, EventArgs.Empty ); Assert.True( raised ); }
public void RemoveHandlerShouldNotRemoveUnaddedHandler() { var target = new WeakEventManager<EventHandler, EventArgs>(); EventHandler handler1 = ( s, e ) => { }; EventHandler handler2 = ( s, e ) => { }; target.AddHandler( handler1 ); Assert.False( target.RemoveHandler( handler2 ) ); }