public void BasicConstructorLifeCycleTest() { var listenerSuccess = false; var publisher = new TestEventPublisher(); var listener = new PropertyChangedEventListener(publisher, (sender, e) => listenerSuccess = true); //------------------ listenerSuccess.Is(false); publisher.RaisePropertyChanged(string.Empty); listenerSuccess.Is(true); //------------------ listenerSuccess = false; listener.Dispose(); publisher.RaisePropertyChanged(string.Empty); listenerSuccess.Is(false); try { listener.RegisterHandler((sender, e) => listenerSuccess = true); } catch (Exception e) { e.GetType().Is(typeof(ObjectDisposedException)); } }
public void SourceReferenceMemoryLeakTest() { var handler1Called = false; var publisherStrongReference = new TestEventPublisher(); var publisherWeakReference = new WeakReference <TestEventPublisher>(publisherStrongReference); var listener = new PropertyChangedEventListener(publisherStrongReference); listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; }); publisherStrongReference.RaisePropertyChanged("Dummy1"); handler1Called.Is(true); listener.Dispose(); publisherStrongReference = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); TestEventPublisher resultPublisher = null; publisherWeakReference.TryGetTarget(out resultPublisher).Is(false); resultPublisher.IsNull(); }
public void FilteredHandlerLifeCycleTest() { var handler1Called = false; var handler2Called = false; var handler3Called = false; var publisher = new TestEventPublisher(); var listener = new PropertyChangedEventListener(publisher); listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; }); listener.RegisterHandler("Dummy2", (sender, e) => { e.PropertyName.Is("Dummy2"); handler2Called = true; }); listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler3Called = true; }); publisher.RaisePropertyChanged("Dummy1"); publisher.RaisePropertyChanged("Dummy2"); handler1Called.Is(true); handler2Called.Is(true); handler3Called.Is(true); //------------------ handler1Called = false; handler2Called = false; handler3Called = false; listener.Dispose(); publisher.RaisePropertyChanged("Dummy1"); publisher.RaisePropertyChanged("Dummy2"); handler1Called.Is(false); handler2Called.Is(false); handler3Called.Is(false); }
//コンストラクタ public StageViewModel(StageModel model, MainViewModel mainViewModel) { MainViewModel = mainViewModel; _model = model; _model.MapModels.CollectionChanged += (sender, args) => { _model.Parent.ResetMapModels(); if (args.Action == NotifyCollectionChangedAction.Add) { var maps = args.NewItems.Cast<MapModel>(); foreach (var m in maps) { var l = new PropertyChangedEventListener(m, (o, eventArgs) => { RaisePropertyChanged(eventArgs.PropertyName); RaisePropertyChanged("CurrentMap"); }); CompositeDisposable.Add(l); } if (CurrentMapIsNull) { _model.CurrentMap = maps.FirstOrDefault(); } RaisePropertyChanged("CurrentMap"); } }; CompositeDisposable.Add(new PropertyChangedEventListener(_model, (sender, e) => RaisePropertyChanged(e.PropertyName))); }
public Model() { _s = new Stream(); _listener = new PropertyChangedEventListener(_s); _listener.RegisterHandler(UpdateHandlerProxy); }
public void Initialize() { _listener = new PropertyChangedEventListener(_model) { { () => _model.Basic, UpdateBasic }, { () => _model.ApplicationGroup, (s, e) => ApplicationGroupName = _model.ApplicationGroup.Name }, { () => _model.Bank, (sender, args) => BankName = string.IsNullOrEmpty(_model.Bank.Name) ? "(default)" : _model.Bank.Name }, { () => _model.IsMenuVisible, IsMenuVisibleChanged }, { () => _model.Message, MassageChanged }, { () => _model.MainWindowVisibility, (s, e) => MainWindowVisibility = _model.MainWindowVisibility } }; UpdateBasic(_model, null); _model.TimerEnabled = true; }
internal MainWindowViewModel() { GameInformation = new GameInformationViewModel(this); r_Page = GameInformation; ApiService.SubscribeOnce("api_start2", delegate { IsGameStarted = true; OnPropertyChanged(nameof(IsGameStarted)); }); ApiService.Subscribe("api_req_map/start", _ => ThemeManager.Instance.ChangeAccent(Accent.Brown)); KanColleGame.Current.ReturnedFromSortie += _ => ThemeManager.Instance.ChangeAccent(Accent.Blue); r_BlinkingBrownAccent = new Accent("BlinkingBrown", new Uri("pack://application:,,,/HeavenlyWind;component/Themes/Accents/BlinkingBrown.xaml")); PropertyChangedEventListener.FromSource(NotificationService.Instance) .Add(nameof(NotificationService.Instance.IsBlinking), delegate { if (NotificationService.Instance.IsBlinking) { ThemeManager.Instance.ChangeAccent(r_BlinkingBrownAccent); } }); ShowConstructionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ConstructionHistoryWindow>()); ShowDevelopmentHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <DevelopmentHistoryWindow>()); ShowSortieHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieHistoryWindow>()); ShowExpeditionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ExpeditionHistoryWindow>()); ShowScrappingHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ScrappingHistoryWindow>()); ShowResourceHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ResourceHistoryWindow>()); ShowSortieConsumptionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieConsumptionHistoryWindow>()); ShowSortieStatisticCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieStatisticWindow>()); }
internal AirBaseViewModel() { var rAirBase = KanColleGame.Current.Port.AirBase; var rPCEL = new PropertyChangedEventListener(rAirBase); rPCEL.Add(nameof(rAirBase.Table), (s, e) => Groups = rAirBase.Table.Values.Select(r => new AirForceGroupViewModel(r)).ToList()); }
public RepairingViewModel(FleetDock dock) { this.source = dock; if (dock.RepairingDock != null) { this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName)); } this.CompositeDisposable.Add(new PropertyChangedEventListener(dock, (sender, args) => { if (args.PropertyName == "RepairingDock") { if (this.listener != null) this.listener.Dispose(); if (dock.RepairingDock != null) { this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName)); } else this.listener = null; this.RaisePropertyChanged("CompleteTime"); this.RaisePropertyChanged("Remaining"); } else if (args.PropertyName == "IsRepairing") this.RaisePropertyChanged("IsRepairing"); })); }
public RepairingViewModel(FleetDock dock) { this.source = dock; if (dock.RepairingDock != null) { this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName)); } this.CompositeDisposable.Add(new PropertyChangedEventListener(dock, (sender, args) => { if (args.PropertyName == "RepairingDock") { if (this.listener != null) { this.listener.Dispose(); } if (dock.RepairingDock != null) { this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName)); } else { this.listener = null; } this.RaisePropertyChanged("CompleteTime"); this.RaisePropertyChanged("Remaining"); } else if (args.PropertyName == "IsRepairing") { this.RaisePropertyChanged("IsRepairing"); } })); }
public void Initialize() { listener = new PropertyChangedEventListener(model) { () => model.DataSource, (_, __) => RaisePropertyChanged(() => DataSource) }; }
internal AirBaseViewModel() { var rAirBase = KanColleGame.Current.Port.AirBase; var rPCEL = PropertyChangedEventListener.FromSource(rAirBase); rPCEL.Add(nameof(rAirBase.AllGroups), (s, e) => Groups = rAirBase.AllGroups.Select(r => new AirForceGroupViewModel(r)).ToArray()); }
public void Initialize() { listener = new PropertyChangedEventListener(Model); listener.Add(() => Model.CurrentLogFile, (_, __) => { IsLargeFile = (Model.CurrentLogFile?.Length ?? 0) > 100 * 1000; }); }
/* コマンド、プロパティの定義にはそれぞれ * * lvcom : ViewModelCommand * lvcomn : ViewModelCommand(CanExecute無) * llcom : ListenerCommand(パラメータ有のコマンド) * llcomn : ListenerCommand(パラメータ有のコマンド・CanExecute無) * lprop : 変更通知プロパティ(.NET4.5ではlpropn) * * を使用してください。 * * Modelが十分にリッチであるならコマンドにこだわる必要はありません。 * View側のコードビハインドを使用しないMVVMパターンの実装を行う場合でも、ViewModelにメソッドを定義し、 * LivetCallMethodActionなどから直接メソッドを呼び出してください。 * * ViewModelのコマンドを呼び出せるLivetのすべてのビヘイビア・トリガー・アクションは * 同様に直接ViewModelのメソッドを呼び出し可能です。 */ /* ViewModelからViewを操作したい場合は、View側のコードビハインド無で処理を行いたい場合は * Messengerプロパティからメッセージ(各種InteractionMessage)を発信する事を検討してください。 */ /* Modelからの変更通知などの各種イベントを受け取る場合は、PropertyChangedEventListenerや * CollectionChangedEventListenerを使うと便利です。各種ListenerはViewModelに定義されている * CompositeDisposableプロパティ(LivetCompositeDisposable型)に格納しておく事でイベント解放を容易に行えます。 * * ReactiveExtensionsなどを併用する場合は、ReactiveExtensionsのCompositeDisposableを * ViewModelのCompositeDisposableプロパティに格納しておくのを推奨します。 * * LivetのWindowテンプレートではViewのウィンドウが閉じる際にDataContextDisposeActionが動作するようになっており、 * ViewModelのDisposeが呼ばれCompositeDisposableプロパティに格納されたすべてのIDisposable型のインスタンスが解放されます。 * * ViewModelを使いまわしたい時などは、ViewからDataContextDisposeActionを取り除くか、発動のタイミングをずらす事で対応可能です。 */ /* UIDispatcherを操作する場合は、DispatcherHelperのメソッドを操作してください。 * UIDispatcher自体はApp.xaml.csでインスタンスを確保してあります。 * * LivetのViewModelではプロパティ変更通知(RaisePropertyChanged)やDispatcherCollectionを使ったコレクション変更通知は * 自動的にUIDispatcher上での通知に変換されます。変更通知に際してUIDispatcherを操作する必要はありません。 */ public void Initialize() { var listener = new PropertyChangedEventListener(drawer); listener.RegisterHandler(() => drawer.Method, (s, ev) => RaisePropertyChanged(() => Method)); CompositeDisposable.Add(listener); }
public MainViewModel() { // 画面デザイン時は処理しない(これにより画面デザインがプレビュー反映されなくなったが、保留) if (DesignerProperties.GetIsInDesignMode(new DependencyObject())) { return; } SolutionExplorerVM = new SolutionExplorerViewModel(); Anchorables = new ObservableCollection <AnchorablePaneViewModel>(); Anchorables.Add(SolutionExplorerVM); Documents = new ObservableCollection <DocumentPaneViewModel>(); // ソリューションエクスプローラーペインからの、プロパティ変更通知を受け取る // (ソリューションエクスプローラーツリー内のソースノードを、クリックした際のイベント処理を引き継ぐ) var listener = new PropertyChangedEventListener(SolutionExplorerVM); listener.RegisterHandler(SolutionExplorerVM_PropertyChanged); CompositeDisposable.Add(listener); // MainView 側、ComboBox の初期選択項目と同じ値にする FontSize = 18; Util.MainVM = this; }
public void Initialize() { listener = new PropertyChangedEventListener(this); listener.Add(FolderNamePropertyName, OnPropertyChanged); listener.Add(SystemCheckedPropertyName, OnPropertyChanged); listener.Add(TemporaryCheckedPropertyName, OnPropertyChanged); listener.Add(ArchiveCheckedPropertyName, OnPropertyChanged); listener.Add(ReadOnlyCheckedPropertyName, OnPropertyChanged); listener.Add(HiddenCheckedPropertyName, OnPropertyChanged); listener.Add(CompressedCheckedPropertyName, OnPropertyChanged); listener.Add(EncryptedCheckedPropertyName, OnPropertyChanged); listenerModel = new PropertyChangedEventListener(Model.GetInstance()); listenerModel.Add(Model.FileSelected, OnPropertyChanged); listenerModel.Add(Model.FormatDecided, OnPropertyChanged); if (string.IsNullOrEmpty(Settings.Default.FolderName)) { FolderName = Directory.GetCurrentDirectory(); Settings.Default.FolderName = FolderName; } else { FolderName = Settings.Default.FolderName; } DirectoryInfos.SelectedDirectoryName = FolderName; Files = Model.GetInstance().FileInfo.GetFileNames(DirectoryInfos.SelectedDirectoryName); }
public ProgramEntryViewModel(ProgramEntry menuEntry) : base(menuEntry) { _menuEntry = menuEntry; FullPath = menuEntry.FullPath; IsDirectory = menuEntry.IsDirectory; Childs = ViewModelHelper.CreateReadOnlyDispatcherCollection( menuEntry.Childs, model => new ProgramEntryViewModel(model), DispatcherHelper.UIDispatcher ); CompositeDisposable.Add(Childs); var listener = new PropertyChangedEventListener(DesktopStartMenuContext.Current) { "IsApplicationActive", (sender, e) => { if(DesktopStartMenuContext.Current.IsApplicationActive && IsExpand) { IsExpand = false; } } }; }
public MainWindowViewModel() { Dpp = new DppViewModel(); CompositeDisposable.Add(Dpp); dppListener = new PropertyChangedEventListener(Dpp); CompositeDisposable.Add(Dpp); dppListener.Add(() => Dpp.Spectrum, OnSpectrumUpdated); PeakFitting = new PeakFittingViewModel(); CompositeDisposable.Add(PeakFitting); peakFittingListener = new PropertyChangedEventListener(PeakFitting); CompositeDisposable.Add(peakFittingListener); peakFittingListener.Add(() => PeakFitting.Input, (s, e) => DoPeakFittingCommand.RaiseCanExecuteChanged()); Tube = new TubeControlViewModel(); CompositeDisposable.Add(Tube); SafetySignal = new SafetySignalViewModel(); CompositeDisposable.Add(SafetySignal); Camera = new CameraControlViewModel(); CompositeDisposable.Add(Camera); Reporting = new ReportingViewModel(); CompositeDisposable.Add(Reporting); selfListener = new PropertyChangedEventListener(this, RaiseCanDoChanged); CompositeDisposable.Add(selfListener); }
public Stream() { _ps = new PlayStream(); _listener = new PropertyChangedEventListener(_ps); _listener.RegisterHandler(UpdateHandlerProxy); }
public void Initialize() { modelListener = new PropertyChangedEventListener(Model); modelListener.Add(() => Model.IsRunning, (_, __) => RaisePropertyChanged(() => RunningState)); modelListener.Add(() => Model.ServerHostName, (_, __) => RaisePropertyChanged(() => WindowCaption)); consoleListListener = new CollectionChangedEventListener(Model.ConsoleList, (_, __) => UpdateNumConsole()); // 他のVMのInitializeを読んでやる foreach (var vm in MainPanelMenu) { InitializeVM(vm); } foreach (var vm in ConsolePanelMenu) { InitializeVM(vm); } foreach (var vm in InfoPanelMenu) { InitializeVM(vm); } Model.ServerAddressRequired = ServerAddressRequired; Model.Start(); }
public void Initialize() { kbtter = Kbtter.Instance; listener = new PropertyChangedEventListener(kbtter); CompositeDisposable.Add(listener); RegisterHandlers(); kbtter.Initialize(); setting = Kbtter3Extension.LoadJson <Kbtter3Setting>(App.ConfigurationFileName); TimelineStatuses.CollectionChanged += (s, e) => { DispatcherHelper.UIDispatcher.BeginInvoke((Action)(() => { if (TimelineStatuses.Count > setting.MainWindow.StatusesShowMax) { TimelineStatuses.RemoveAt(setting.MainWindow.StatusesShowMax); } })); }; TimelineNotifications.CollectionChanged += (s, e) => { DispatcherHelper.UIDispatcher.BeginInvoke((Action)(() => { if (TimelineNotifications.Count > setting.MainWindow.NotificationsShowMax) { TimelineNotifications.RemoveAt(setting.MainWindow.NotificationsShowMax); } })); }; }
public async void Initialize() { _model = new Model(); _listener = new PropertyChangedEventListener(_model) { nameof(_model.DownloadPluginDic), (_, __) => DispatcherHelper.UIDispatcher.Invoke(() => { _DownloadPluginList.Clear(); foreach (var v in _model.DownloadPluginDic.Values) { MMDPluginPackage package; _model.MMDInstalledPluginPackage.TryGetValue(v.Title, out package); _DownloadPluginList.Add(new PluginData { LatestVersion = v.LatestVersion, NowVersion = package?.Version ?? -1, Title = v.Title, ReadMeFilePath = package?.ReadMeFilePath, Url = v.Url }); } RaisePropertyChanged(nameof(DownloadPluginList)); }) }; // mmdを選択してもらう MessageBox.Show("Choose MikuMikuDance.exe (ver9.26 x64)."); var ofd = new OpenFileDialog { FileName = "MikuMikuDance.exe", Filter = "exe file(*.exe)|*.exe|all file(*.*)|*.*", FilterIndex = 1, Title = "Choose MikuMikuDance.exe (ver9.26 x64)" }; if (ofd.ShowDialog() == false) { // キャンセルした場合は終了する MessageBox.Show("Canceled, so this program will end."); ExitWindow(); return; } try { _model.SetMMDDirectory(ofd.FileName); } catch (Exception e) { // 選択したものが間違っていた場合は終了する MessageBox.Show(e.Message + "\nThis program will end."); ExitWindow(); return; } await _model.LoadPluginData(); }
public void Initialize() { if (OS.IsWin8OrLater) { InstallShortcut(); } else { InitializeNotifyIcon(); } var rGamePCEL = PropertyChangedEventListener.FromSource(KanColleGame.Current); rGamePCEL.Add(nameof(KanColleGame.Current.IsStarted), delegate { var rPort = KanColleGame.Current.Port; rPort.Fleets.FleetsUpdated += rpFleets => { foreach (var rFleet in rpFleets) { rFleet.ExpeditionStatus.Returned += (rpFleetName, rpExpeditionName) => { if (Preference.Instance.Notification.Expedition) { Show(StringResources.Instance.Main.Notification_Expedition, string.Format(StringResources.Instance.Main.Notification_Expedition_Content, rpFleetName, rpExpeditionName)); } }; rFleet.ConditionRegeneration.Recovered += rpFleet => { if (Preference.Instance.Notification.RecoveryFromFatigue) { Show(StringResources.Instance.Main.Notification_RecoveryFromFatigue, string.Format(StringResources.Instance.Main.Notification_RecoveryFromFatigue_Content, rpFleet.Name)); } }; rFleet.AnchorageRepair.InterruptionNotification += () => { if (Preference.Instance.Notification.AnchorageRepair) { Show(StringResources.Instance.Main.Notification_AnchorageRepair, StringResources.Instance.Main.Notification_AnchorageRepair_Content); } }; } }; var rPortPCEL = PropertyChangedEventListener.FromSource(rPort); rPortPCEL.Add(nameof(rPort.ConstructionDocks), delegate { foreach (var rConstructionDock in rPort.ConstructionDocks.Values) { rConstructionDock.ConstructionCompleted += rpShipName => { if (Preference.Instance.Notification.Construction) { Show(StringResources.Instance.Main.Notification_Construction, string.Format(StringResources.Instance.Main.Notification_Construction_Content, rpShipName)); } } } ; });
public MainWindowViewModel() { Op = new Operator(this); // Add event listeners. if (!Designer.IsInDesignMode) // AddListener source may be null in Design mode. { _fileListPropertyChangedListener = new PropertyChangedEventListener(FileListPropertyChanged); PropertyChangedEventManager.AddListener(FileListCore, _fileListPropertyChangedListener, string.Empty); _settingsPropertyChangedListener = new PropertyChangedEventListener(ReactSettingsPropertyChanged); PropertyChangedEventManager.AddListener(Settings.Current, _settingsPropertyChangedListener, string.Empty); _operatorPropertyChangedListener = new PropertyChangedEventListener(ReactOperatorPropertyChanged); PropertyChangedEventManager.AddListener(Op, _operatorPropertyChangedListener, string.Empty); } // Subscribe event handlers. Subscription.Add(Observable.FromEvent ( handler => _currentFrameSizeChanged += handler, handler => _currentFrameSizeChanged -= handler ) .Throttle(TimeSpan.FromMilliseconds(50)) .ObserveOn(SynchronizationContext.Current) .Subscribe(_ => SetCurrentImage())); Subscription.Add(Observable.FromEvent ( handler => _autoCheckIntervalChanged += handler, handler => _autoCheckIntervalChanged -= handler ) .Throttle(TimeSpan.FromMilliseconds(200)) .ObserveOn(SynchronizationContext.Current) .Subscribe(_ => Op.ResetAutoTimer())); Subscription.Add(Observable.FromEvent ( handler => _targetConditionChanged += handler, handler => _targetConditionChanged -= handler ) .Throttle(TimeSpan.FromMilliseconds(200)) .ObserveOn(SynchronizationContext.Current) .Subscribe(_ => { FileListCoreView.Refresh(); Op.UpdateProgress(); })); Subscription.Add(Observable.FromEventPattern ( handler => Op.ActivateRequested += handler, handler => Op.ActivateRequested -= handler ) .ObserveOn(SynchronizationContext.Current) .Subscribe(_ => ActivateRequested?.Invoke(this, EventArgs.Empty))); SetSample(1); }
internal OverviewViewModel() { var rPort = KanColleGame.Current.Port; var rPortPCEL = PropertyChangedEventListener.FromSource(rPort); rPortPCEL.Add(nameof(rPort.Ships), (s, e) => ShipCount = rPort.Ships.Count); rPortPCEL.Add(nameof(rPort.Equipment), (s, e) => EquipmentCount = rPort.Equipment.Count); rPortPCEL.Add(nameof(rPort.RepairDocks), (s, e) => RepairDocks = rPort.RepairDocks.Values.Select(r => new RepairDockViewModel(r)).ToList()); rPortPCEL.Add(nameof(rPort.ConstructionDocks), (s, e) => ConstructionDocks = rPort.ConstructionDocks.Values.Select(r => new ConstructionDockViewModel(r)).ToList()); rPortPCEL.Add(nameof(rPort.Admiral), delegate { if (!r_IsAdmiralInitialized) { var rAdmiral = rPort.Admiral; var rAdmiralPCEL = PropertyChangedEventListener.FromSource(rAdmiral); rAdmiralPCEL.Add(nameof(rAdmiral.MaxShipCount), (s, e) => CheckShipCapacity()); rAdmiralPCEL.Add(nameof(rAdmiral.MaxEquipmentCount), (s, e) => CheckEquipmentCapacity()); r_IsAdmiralInitialized = true; } CheckCapacity(); }); AirBase = new AirBaseViewModel(); r_AirBasePCEL = PropertyChangedEventListener.FromSource(rPort.AirBase); r_AirBasePCEL.Add(nameof(rPort.AirBase.AllGroups), delegate { if (rPort.AirBase.Table.Count == 0) { return; } DispatcherUtil.UIDispatcher.InvokeAsync(() => { if (RightTabs == null) { RightTabs = new ObservableCollection <ModelBase>(); OnPropertyChanged(nameof(RightTabs)); } RightTabs.Add(AirBase); }); r_AirBasePCEL.Dispose(); r_AirBasePCEL = null; }); ApiService.Subscribe("api_req_map/next", delegate { var rSortie = SortieInfo.Current; if (rSortie != null) { ShipCount = rPort.Ships.Count + rSortie.PendingShipCount; } }); }
public MainWindowViewModel() { mModel = new Model(); var listener = new PropertyChangedEventListener(mModel); listener.RegisterHandler(nameof(Model.BindText), (s, e) => { RaisePropertyChanged(nameof(BindText)); }); CompositeDisposable.Add(listener); }
public FilePeriodViewModel() { if (!Designer.IsInDesignMode) // AddListener source may be null in Design mode. { _resourcesPropertyChangedListener = new PropertyChangedEventListener(ReactResourcesPropertyChanged); PropertyChangedEventManager.AddListener(ResourceService.Current, _resourcesPropertyChangedListener, nameof(ResourceService.Resources)); } }
public void Initialize() { listener = new PropertyChangedEventListener(Model); listener.Add(() => Model.BitrateA, UpdateBitrate); listener.Add(() => Model.BitrateB, UpdateBitrate); listener.Add(() => Model.BitrateH264, UpdateBitrate); }
public ApplicationViewMoel(TwitterApplication application) { this.Application = application; var listener = new PropertyChangedEventListener(application) { { "Name", (sender, e) => this.RaisePropertyChanged("Name") }, }; this.CompositeDisposable.Add(listener); }
public void Initialize() { _listener = new PropertyChangedEventListener(_model) { { () => _model.Basic, UpdateBasic }, { () => _model.IsMenuVisible, IsMenuVisibleChangedEventHandler } }; UpdateBasic(_model, null); }
public VideoItemViewModel() { _Model = new VideoItemModel(); //よくわからない modelに通知できていない var modelListener = new PropertyChangedEventListener(_Model, (sender, e) => RaisePropertyChanged(() => this.Text)); base.CompositeDisposable.Add(modelListener); }
public HandlerMemoryLeakTestClass(INotifyPropertyChanged publisher) { Listener = new PropertyChangedEventListener(publisher); // This handler refers "this". PropertyChangedEventHandler handler = (sender, e) => { ToString(); }; Listener.RegisterHandler(handler); Listener.RegisterHandler("Dummy1", handler); }
internal FileItemViewModel(string source, string directoryPath) { Import(source, directoryPath); if (!Designer.IsInDesignMode) // AddListener source may be null in Design mode. { resourcesPropertyChangedListener = new PropertyChangedEventListener(ReactResourcesPropertyChanged); PropertyChangedEventManager.AddListener(ResourceService.Current, resourcesPropertyChangedListener, "Resources"); } }
public TechnologyDevelopViewModel(GameInfo gameInfo, TechnologyDevelopWindow window) { this.gameInfo = gameInfo; this.window = window; listener = new PropertyChangedEventListener(gameInfo, PropertyChangedInGameInfo); window.Closed += (sender, eventArgs) => { listener.Dispose(); }; this.Cancel = new CancelCommand(this); }
internal MainWindowViewModel() { r_Page = new InitializationPageViewModel(this); GameInformation = new GameInformationViewModel(this); ApiService.SubscribeOnce("api_start2", delegate { IsGameStarted = true; OnPropertyChanged(nameof(IsGameStarted)); }); ShowSessionToolCommand = new DelegatedCommand(() => WindowService.Instance.Show <SessionToolWindow>(r_SessionTool)); ApiService.Subscribe("api_req_map/start", _ => ThemeManager.Instance.ChangeAccent(Accent.Brown)); KanColleGame.Current.ReturnedFromSortie += _ => ThemeManager.Instance.ChangeAccent(Accent.Blue); Preference.Instance.Game.DisableHeavyDamageBlinkingWarning.Subscribe(rpValue => { if (SortieInfo.Current == null) { return; } if (!rpValue) { ThemeManager.Instance.ChangeAccent(Accent.Brown); } }); r_BlinkingBrownAccent = new Accent("BlinkingBrown", new Uri("pack://application:,,,/HeavenlyWind;component/Themes/Accents/BlinkingBrown.xaml")); PropertyChangedEventListener.FromSource(NotificationService.Instance) .Add(nameof(NotificationService.Instance.IsBlinking), delegate { if (NotificationService.Instance.IsBlinking) { ThemeManager.Instance.ChangeAccent(r_BlinkingBrownAccent); } }); UISetZoomCommand = new DelegatedCommand <double>(SetZoom); UIZoomInCommand = new DelegatedCommand(() => SetZoom(Preference.Instance.UI.Zoom.Value + .05)); UIZoomOutCommand = new DelegatedCommand(() => SetZoom(Preference.Instance.UI.Zoom.Value - .05)); UIZoomFactors = new[] { .25, .5, .75, 1.0, 1.25, 1.5, 1.75, 2.0, 3.0, 4.0 }.Select(r => new UIZoomInfo(r, UISetZoomCommand)).ToArray(); ShowConstructionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ConstructionHistoryWindow>()); ShowDevelopmentHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <DevelopmentHistoryWindow>()); ShowSortieHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieHistoryWindow>()); ShowExpeditionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ExpeditionHistoryWindow>()); ShowScrappingHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ScrappingHistoryWindow>()); ShowResourceHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <ResourceHistoryWindow>()); ShowSortieConsumptionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieConsumptionHistoryWindow>()); ShowSortieStatisticCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieStatisticWindow>()); }
protected void AddEventListener(INotifyPropertyChanged source, PropertyChangedEventHandler handler) { if (source == null) { throw new ArgumentException("source"); } if (handler == null) { throw new ArgumentException("handler"); } PropertyChangedEventListener listener = new PropertyChangedEventListener(source, handler); propertyEventListeners.Add(listener); PropertyChangedEventManager.AddListener(source, listener, ""); }
public StreamManagerViewModel(Account account) { _selectedIndex = -1; _accountModel = account; _streamManagerModel = account.Stream; _streams = ViewModelHelper.CreateReadOnlyDispatcherCollection( _streamManagerModel.Streams, item => new StreamViewModel(item), App.Current.Dispatcher); CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this)); _thisPropChangedEventListener.Add(() => IsActive, IsActive_PropertyChanged); }
public NotificationManagerViewModel(NotificationManager model) { _managerModel = model; Items = new DispatcherCollection<NotificationStreamViewModel>(App.Current.Dispatcher); CompositeDisposable.Add(_modelPropChangedEventListener = new PropertyChangedEventListener(model)); CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this)); CompositeDisposable.Add(Observable.Interval(TimeSpan.FromSeconds(60)).Subscribe(Interval_Fired)); _modelPropChangedEventListener.Add(() => model.UnreadItemCount, UnreadItemCount_PropertyChanged); _thisPropChangedEventListener.Add(() => IsActive, IsActive_PropertyChanged); }
protected EntryViewModel(Entry entry) { IconImage = entry.IconImage; DisplayName = entry.DisplayName; var listener = new PropertyChangedEventListener(entry) { "DisplayName",(sender,e) => DisplayName = entry.DisplayName, "IconImage",(sender,e) => IconImage = entry.IconImage }; CompositeDisposable.Add(listener); }
public void Initialize() { listener = new PropertyChangedEventListener(Model); listener.Add(() => Model.DiskFreeSpace, (_, __) => { DiskItems = Model.DiskFreeSpace.Select( item => new DiskItemViewModel() { Model = item }).ToList(); }); }
void Initialize() { MapAreas = KanColleGame.Current.MasterInfo.Expeditions.Values.Where(r => ExpeditionService.Instance.ContainsInfo(r.ID)).GroupBy(r => r.MapArea).Select(r => new ExpeditionGroupByMapArea(r)).ToList(); OnPropertyChanged(nameof(MapAreas)); r_PCELs = KanColleGame.Current.Port.Fleets.Table.Values.Skip(1).Select(r => { var rPCEL = new PropertyChangedEventListener(r); rPCEL.Add(nameof(r.Ships), (s, e) => Update(r)); return rPCEL; }).ToArray(); }
static InputModel() { _disposables = new CompositeDisposable(); _core = new InputCoreModel(); _accounts = new AccountSelectorModel(_core); // link property changing var icmpc = new PropertyChangedEventListener(_core); icmpc.RegisterHandler(() => _core.CurrentInputData, (o, e) => _accounts.CurrentInputDataChanged()); _disposables.Add(icmpc); SetEventPropagation(); }
public UserProfilePageViewModel(User us, MainWindowViewModel vm) { user = us; mainw = vm; mwlistener = new PropertyChangedEventListener(mainw); mwlistener.Add("TabClose", (s, e) => { if (mainw.ClosedTabTag == this) { Dispose(); } }); }
public UserCustomizableTimelineViewModel(MainWindowViewModel mv) { main = mv; listener = new PropertyChangedEventListener(kbtter); CompositeDisposable.Add(listener); listener.Add("Status", OnStatus); mwlistener = new PropertyChangedEventListener(main); mwlistener.Add("TabClose", (s, e) => { if (main.ClosedTabTag==this) { Dispose(); } }); }
public MainWindowViewModel() { #region Timerモデル生成および聞き耳設定 _timerModel = new TimerModel(); var timerListener = new PropertyChangedEventListener(_timerModel); timerListener.RegisterHandler("NowTimerStatus", (sender, e) => { if (_timerModel.NowTimerStatus == TimerModel.TimerStatus.CountDown) { StartPauseButtonContent = "PAUSE"; TimerValueListIsEnable = false; } else { StartPauseButtonContent = "START"; TimerValueListIsEnable = true; } }); timerListener.RegisterHandler("TimerRemainValue", (sender, e) => { RemainTime = _timerModel.TimerRemainValue.ToString(@"hh\:mm\:ss\:fff"); }); this.CompositeDisposable.Add(timerListener); #endregion #region Timer値リストモデル生成および聞き耳設定 _timerValueListModel = TimerListFactory.Create(); var timerValueListListener = new PropertyChangedEventListener(_timerValueListModel); timerValueListListener.RegisterHandler("TimerValueListModel", (sender, e) => { TimerValueList = _timerValueListModel.getEditTimerValueList(); // コンボボックス表示用文字列再構築 TimerValueStrList.Clear(); foreach(TimeSpan ts in TimerValueList) { TimerValueStrList.Add(MyUtil.TimeSpanTo24hStr(ts)); } RaisePropertyChanged("TimerValueStrList"); }); this.CompositeDisposable.Add(timerValueListListener); #endregion }
public void MultipleHandlerLifeCycleTest() { var handler1Success = false; var handler2Success = false; var publisher = new TestEventPublisher(); var listener = new PropertyChangedEventListener(publisher); //------------------ handler1Success.Is(false); handler2Success.Is(false); publisher.RaisePropertyChanged(string.Empty); handler1Success.Is(false); handler2Success.Is(false); //------------------ listener.RegisterHandler((sender, e) => handler1Success = true); publisher.RaisePropertyChanged(string.Empty); handler1Success.Is(true); handler2Success.Is(false); //------------------ handler1Success = false; handler2Success = false; listener.RegisterHandler((sender, e) => handler2Success = true); publisher.RaisePropertyChanged(string.Empty); handler1Success.Is(true); handler2Success.Is(true); //------------------ handler1Success = false; handler2Success = false; listener.Dispose(); publisher.RaisePropertyChanged(string.Empty); handler1Success.Is(false); handler2Success.Is(false); }
public AccountViewModel(Account model, MainViewModel managerVM) { _accountModel = model; _userName = _accountModel.Builder.Name; _userMailAddress = _accountModel.Builder.Email; _manager = managerVM; _stream = new StreamManagerViewModel(_accountModel); _notification = new NotificationManagerViewModel(_accountModel.Notification); OpenAccountListCommand = new ViewModelCommand(OpenAccountListCommand_Execute); ActivateCommand = new ViewModelCommand(ActivateCommand_Execute); CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this)); _thisPropChangedEventListener.Add(() => IsActive, IsActive_PropertyChanged); DataCacheDictionary .DownloadImage(new Uri(_accountModel.Builder.IconUrl.Replace("$SIZE_SEGMENT", "s38-c-k"))) .ContinueWith(tsk => UserIconUrl = tsk.Result); }
public MaterialManager(MaterialChartPlugin plugin) { this.plugin = plugin; this.Log = new MaterialLog(plugin); KanColleClient.Current // KanColleClientのIsStartedがtrueに変更されたら資材データの購読を開始 .Subscribe(nameof(KanColleClient.IsStarted), () => { var materials = KanColleClient.Current.Homeport.Materials; var adomiral = KanColleClient.Current.Homeport.Admiral; listener = new PropertyChangedEventListener(materials) { { nameof(materials.Fuel), (_,__) => RaisePropertyChanged(nameof(Fuel)) }, { nameof(materials.Ammunition), (_,__) => RaisePropertyChanged(nameof(Ammunition)) }, { nameof(materials.Steel), (_,__) => RaisePropertyChanged(nameof(Steel)) }, { nameof(materials.Bauxite), (_,__) => RaisePropertyChanged(nameof(Bauxite)) }, { nameof(materials.InstantRepairMaterials), (_,__) => RaisePropertyChanged(nameof(RepairTool)) }, { nameof(adomiral.Level), (_, __) => RaisePropertyChanged(nameof(StorableMaterialLimit)) } }; // 資材のロギング Observable.FromEvent<PropertyChangedEventHandler, PropertyChangedEventArgs>( h => (sender, e) => h(e), h => materials.PropertyChanged += h, h => materials.PropertyChanged -= h) // プロパティ名が一致しているか調べて .Where(e => IsObservedPropertyName(e.PropertyName)) // まとめて通知が来るので10ms待機して .Throttle(TimeSpan.FromMilliseconds(10)) // 処理 .Subscribe(async _ => { if (Log.HasLoaded) { Log.History.Add(new TimeMaterialsPair(DateTime.Now, Fuel, Ammunition, Steel, Bauxite, RepairTool, materials.DevelopmentMaterials, materials.InstantBuildMaterials, materials.ImprovementMaterials)); await Log.SaveAsync(); } }); this.IsAvailable = true; }, false); }
public StreamViewModel(Stream circle) { _circleModel = circle; _name = circle.Name; _status = StreamStateType.UnLoaded; ReconnectCommand = new ViewModelCommand(ReconnectCommand_Executed); ResumeCommand = new ViewModelCommand(ReconnectCommand_Executed); ResumeButton = new ResumeButtonViewModel() { ClickCommand = ReconnectCommand }; CompositeDisposable.Add(_modelPropChangedEventListener = new PropertyChangedEventListener(circle)); CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this)); CompositeDisposable.Add(_activities = ViewModelHelper.CreateReadOnlyDispatcherCollection<Activity, ViewModel>( _circleModel.Activities, item => new ActivityViewModel(item, _isActive), App.Current.Dispatcher)); _modelPropChangedEventListener.Add(() => circle.Status, Model_Status_PropertyChanged); _modelPropChangedEventListener.Add(() => circle.ChangedActivityCount, Model_ChangedActivityCount_PropertyChanged); _thisPropChangedEventListener.Add(() => ScrollOffset, ScrollOffset_PropertyChanged); }
public ActivityViewModel(Activity activity, bool isActive) { _model = activity; _isActive = isActive; _comments = ViewModelHelper.CreateReadOnlyDispatcherCollection( _model.Comments, item => new CommentViewModel(item, _isActive), App.Current.Dispatcher); _comments.CollectionChanged += _comments_CollectionChanged; SendCommentCommand = new ViewModelCommand(SendCommentCommand_Executed); CancelCommentCommand = new ViewModelCommand(CancelCommentCommand_Executed); CompositeDisposable.Add(_comments); CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this)); CompositeDisposable.Add( Observable.Merge( Observable.Return(Unit.Default), Observable.FromEventPattern<EventHandler, EventArgs>( handler => _model.Updated += handler, handler => _model.Updated -= handler).Select(info => Unit.Default)) .Subscribe(info => Task.Run(() => Refresh(_isActive)))); _thisPropChangedEventListener.Add(() => IsCheckedCommentsHeader, IsCheckedCommentsHeader_PropertyChanged); }
private void InitializeEventListeners() { listener = new PropertyChangedEventListener(Kbtter); CompositeDisposable.Add(listener); listener.Add("AuthenticatedUser", (s, e) => { View.LoginUser.Dispose(); View.LoginUser = new UserViewModel(Kbtter.AuthenticatedUser, this); UpdateStatusCommand.RaiseCanExecuteChanged(); }); listener.Add("NotifyText", (s, e) => { View.Notify(Kbtter.NotifyText); }); listener.Add("HeadlineText", (s, e) => { View.HeadlineText = Kbtter.HeadlineText; View.HeadlineUserImage = Kbtter.HeadlineUserImage; }); }
public InputCoreViewModel(InputViewModel parent) { this._parent = parent; this._provider = new InputAreaSuggestItemProvider(); CompositeDisposable.Add( this._bindingHashtags = ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx( InputModel.InputCore.BindingHashtags, tag => new BindHashtagViewModel(tag, () => UnbindHashtag(tag)), DispatcherHelper.UIDispatcher)); CompositeDisposable.Add(_bindingHashtags .ListenCollectionChanged() .Subscribe(_ => { InputData.BoundTags = _bindingHashtags.Select(h => h.Hashtag).ToArray(); RaisePropertyChanged(() => IsBindingHashtagExisted); })); _bindableHashtagCandidates = new DispatcherCollection<BindHashtagViewModel>(DispatcherHelper.UIDispatcher); CompositeDisposable.Add(_bindableHashtagCandidates .ListenCollectionChanged() .Subscribe(_ => RaisePropertyChanged(() => IsBindableHashtagExisted))); CompositeDisposable.Add(_draftedInputs = ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx( InputModel.InputCore.Drafts, _ => new InputDataViewModel(this, _, vm => InputModel.InputCore.Drafts.Remove(vm)), DispatcherHelper.UIDispatcher)); CompositeDisposable.Add(_draftedInputs .ListenCollectionChanged() .Subscribe(_ => { RaisePropertyChanged(() => DraftCount); RaisePropertyChanged(() => IsDraftsExisted); })); // listen setting changed CompositeDisposable.Add( Setting.SuppressTagBindingInReply.ListenValueChanged( _ => RaisePropertyChanged(() => IsBindHashtagEnabled))); // listen text control CompositeDisposable.Add(new EventListener<Action<CursorPosition>>( h => InputModel.SetCursorRequest += h, h => InputModel.SetCursorRequest -= h, SetCursor)); var plistener = new PropertyChangedEventListener(InputModel.InputCore); plistener.Add(() => InputModel.InputCore.CurrentInputData, (_, e) => InputDataChanged()); CompositeDisposable.Add(plistener); // initialize clipboard watcher. ClipboardWatcher watcher; CompositeDisposable.Add(watcher = new ClipboardWatcher()); watcher.ClipboardChanged += (o, e) => RaisePropertyChanged(() => IsClipboardContentImage); watcher.StartWatching(); Setting.DisableGeoLocationService.ValueChanged += this.UpdateGeoLocationService; this.UpdateGeoLocationService(Setting.DisableGeoLocationService.Value); }
public DirectoryInfos() { listener = new PropertyChangedEventListener(this); listener.Add(IsExpandedPropertyName, OnPropertyChanged); listener.Add(IsSelectedPropertyName, OnPropertyChanged); }
public void AddHandlerKindTest() { var handler1Called = false; var handler2Called = false; var handler3Called = false; var handler4Called = false; var handler5Called = false; var publisher = new TestEventPublisher(); var listener1 = new PropertyChangedEventListener(publisher) { {"Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; }}, {() => publisher.Dummy2, (sender, e) => { e.PropertyName.Is("Dummy2"); handler2Called = true;}, (sender, e) => { e.PropertyName.Is("Dummy2"); handler3Called = true;} }, (sender,e) => handler4Called = true, {"Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler5Called = true; }} }; publisher.RaisePropertyChanged(null); handler1Called.Is(false); handler2Called.Is(false); handler3Called.Is(false); handler4Called.Is(true); handler5Called.Is(false); handler4Called = false; publisher.RaisePropertyChanged("Dummy1"); handler1Called.Is(true); handler2Called.Is(false); handler3Called.Is(false); handler4Called.Is(true); handler5Called.Is(true); handler1Called = false; handler4Called = false; handler5Called = false; publisher.RaisePropertyChanged("Dummy2"); handler1Called.Is(false); handler2Called.Is(true); handler3Called.Is(true); handler4Called.Is(true); handler5Called.Is(false); handler1Called = false; handler2Called = false; handler3Called = false; handler4Called = false; handler5Called = false; listener1.Dispose(); publisher.RaisePropertyChanged("Dummy1"); publisher.RaisePropertyChanged("Dummy2"); handler1Called.Is(false); handler2Called.Is(false); handler3Called.Is(false); handler4Called.Is(false); handler5Called.Is(false); }
public void MultiThreadHandlerTest() { var publisher = new TestEventPublisher(); var listener = new PropertyChangedEventListener(publisher); var handlerCalledCount = 0; var parentTask = new Task(() => { var tf = new TaskFactory(TaskCreationOptions.AttachedToParent, TaskContinuationOptions.AttachedToParent); for (int i = 0; i < 50; i++) { tf.StartNew(() => { for (int f = 0; f < 500; f++) { listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handlerCalledCount++; }); } }); } }); parentTask.Start(); parentTask.Wait(); handlerCalledCount.Is(0); publisher.RaisePropertyChanged("Dummy1"); handlerCalledCount.Is(25000); handlerCalledCount = 0; listener.Dispose(); publisher.RaisePropertyChanged("Dummy1"); handlerCalledCount.Is(0); }
public InputCoreViewModel(InputViewModel parent) { this._parent = parent; this._provider = new InputAreaSuggestItemProvider(); CompositeDisposable.Add( this._bindingHashtags = ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx( InputModel.InputCore.BindingHashtags, tag => new BindHashtagViewModel(tag, () => UnbindHashtag(tag)), DispatcherHelper.UIDispatcher)); CompositeDisposable.Add(_bindingHashtags .ListenCollectionChanged() .Subscribe(_ => { InputData.BoundTags = _bindingHashtags.Select(h => h.Hashtag).ToArray(); RaisePropertyChanged(() => IsBindingHashtagExisted); })); _bindableHashtagCandidates = new DispatcherCollection<BindHashtagViewModel>(DispatcherHelper.UIDispatcher); CompositeDisposable.Add(_bindableHashtagCandidates .ListenCollectionChanged() .Subscribe(_ => RaisePropertyChanged(() => IsBindableHashtagExisted))); CompositeDisposable.Add(_draftedInputs = ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx( InputModel.InputCore.Drafts, _ => new InputDataViewModel(this, _, vm => InputModel.InputCore.Drafts.Remove(vm)), DispatcherHelper.UIDispatcher)); CompositeDisposable.Add(_draftedInputs .ListenCollectionChanged() .Subscribe(_ => { RaisePropertyChanged(() => DraftCount); RaisePropertyChanged(() => IsDraftsExisted); })); // listen setting changed CompositeDisposable.Add( Setting.SuppressTagBindingInReply.ListenValueChanged( _ => RaisePropertyChanged(() => IsBindHashtagEnabled))); // listen text control CompositeDisposable.Add(new EventListener<Action<CursorPosition>>( h => InputModel.SetCursorRequest += h, h => InputModel.SetCursorRequest -= h, SetCursor)); var plistener = new PropertyChangedEventListener(InputModel.InputCore); plistener.Add(() => InputModel.InputCore.CurrentInputData, (_, e) => InputDataChanged()); CompositeDisposable.Add(plistener); // create temporary directory and reserve deletion before exit app. do { _tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); } while (Directory.Exists(_tempDir)); Directory.CreateDirectory(_tempDir); App.ApplicationExit += () => { try { Directory.Delete(this._tempDir, true); } // ReSharper disable once EmptyGeneralCatchClause catch (Exception) { // I think that is sign from God that I must not delete that folder if failed. } }; // initialize clipboard watcher. ClipboardWatcher watcher; CompositeDisposable.Add(watcher = new ClipboardWatcher()); watcher.ClipboardChanged += (o, e) => RaisePropertyChanged(() => IsClipboardContentImage); watcher.StartWatching(); Setting.DisableGeoLocationService.ValueChanged += this.UpdateGeoLocationService; this.UpdateGeoLocationService(Setting.DisableGeoLocationService.Value); }
public void SourceReferenceMemoryLeakTest() { var handler1Called = false; var publisherStrongReference = new TestEventPublisher(); var publisherWeakReference = new WeakReference<TestEventPublisher>(publisherStrongReference); var listener = new PropertyChangedEventListener(publisherStrongReference); listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; }); publisherStrongReference.RaisePropertyChanged("Dummy1"); handler1Called.Is(true); listener.Dispose(); publisherStrongReference = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); TestEventPublisher resultPublisher = null; publisherWeakReference.TryGetTarget(out resultPublisher).Is(false); resultPublisher.IsNull(); }
public void Initialize() { listener = new PropertyChangedEventListener(kbtter); CompositeDisposable.Add(listener); }