示例#1
0
        public void RegisterShouldThrowWhenPropertyIsWrong()
        {
            DummyClass source = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler("Misspelled Property", src => { });
        }
        public void DisposeTest()
        {
            string actualValue = null;

            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };
            WeakReference wr = new WeakReference(obj);

            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.RegisterHandler(o => o.SValue, (oo) => actualValue = oo.SValue);

            obj.SValue = "1";
            Assert.AreEqual("1", actualValue);

            po.Dispose();
            obj.SValue = "2";
            Assert.AreEqual("1", actualValue);

#if !DEBUG
            obj = null;
            GC.Collect(2, GCCollectionMode.Forced);
            Assert.IsFalse(wr.IsAlive);
#endif
        }
示例#3
0
        public void RegisterShouldThrowWhenExpressionIsNull()
        {
            DummyClass source = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler((Expression <Func <DummyClass, object> >)null, src => { });
        }
        public EntityViewModel(IDialogService dialogService)
        {
            _dialogService = dialogService;

            Search = new RelayCommand(PrivateSearch);

            RefreshList = new RelayCommand(() =>
            {
                if (SdtdConsole.Instance.IsConnected == false)
                {
                    _dialogService.ShowInformation("请先连接服务器");
                }
                else
                {
                    RequestData();
                }
            });

            _currentPropertyObserver = new PropertyObserver <EntityViewModel>(this);
            _currentPropertyObserver.RegisterHandler(p => p.SearchText, (vm) => { vm.PrivateSearch(); });

            SdtdConsole.Instance.ReceivedTempListData += OnReceivedTempListData;

            Task.Run(() =>
            {
                Thread.Sleep(100);
                RequestData();
            });
        }
示例#5
0
        public void RegisterShouldThrowWhenPropertyIsNull()
        {
            DummyClass source = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler((string)null, src => { });
        }
        public GameNoticeViewModel(IDispatcherService dispatcherService, string functionTag) : base(dispatcherService, functionTag)
        {
            SendWelcomeNotice = new RelayCommand(() =>
            {
                SdtdConsole.Instance.SendGlobalMessage(WelcomeNotice);
            });

            SendAlternateNotice = new RelayCommand(() =>
            {
                SdtdConsole.Instance.SendGlobalMessage(AlternateNotice);
            });

            Timer = new Timer()
            {
                AutoReset = true, Interval = AlternateInterval * 1000
            };
            Timer.Elapsed += OnTimer_Elapsed;

            _currentViewModelObserver = new PropertyObserver <GameNoticeViewModel>(this);
            _currentViewModelObserver.RegisterHandler(currentViewModel => currentViewModel.AlternateInterval,
                                                      (vm) =>
            {
                if (AlternateInterval > 0)
                {
                    Timer.Interval = AlternateInterval * 1000;
                }
            });
        }
示例#7
0
        public void RegisterShouldThrowWhenPropertyIsEmpty()
        {
            DummyClass source = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler("", src => { });
        }
示例#8
0
        public ItemViewModel(IDispatcherService dispatcherService, IDialogService dialogService)
        {
            _dispatcherService = dispatcherService;
            _dialogService     = dialogService;

            ColoredImageDatas = new ObservableCollection <ColoredImageData>();

            Search = new RelayCommand(PrivateSearch);

            currentPropertyObserver = new PropertyObserver <ItemViewModel>(this);
            currentPropertyObserver.RegisterHandler(p => p.SearchText, (vm) => { vm.PrivateSearch(); });

            Task.Run(() =>
            {
                try
                {
                    LoadXml(ColoredImageDatas, XmlPath);
                }
                catch (Exception ex)
                {
                    string title = string.Format("加载 {0} 失败", XmlPath);

                    Log.Error(ex, title);

                    _dispatcherService.InvokeAsync(() =>
                    {
                        _dialogService.ShowInformation(ex.Message, title);
                    });
                }
            });
        }
示例#9
0
        public void RegisterShouldThrowWhenExpressionWrong()
        {
            DummyClass source = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler(src => src, src => { });
        }
示例#10
0
        public void RegisterShouldThrowWhenHandlerIsNull2()
        {
            DummyClass source = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler(src => src.Value, null);
        }
        public void RegisterHandlerNullTest2()
        {
            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };
            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            Assert.ThrowsException <ArgumentNullException>(() => po.RegisterHandler(o => o.SValue, null));
        }
        public PlayerControlsViewModel(TimeManager timeManager)
        {
            this.timeManager = timeManager;

            Observer = new PropertyObserver<TimeManager>(this.timeManager);
            Observer.RegisterHandler(n => n.FactorTemporal, n => base.RaisePropertyChanged("TimeLapse"))
                    .RegisterHandler(n => n.IsPlaying, n => base.RaisePropertyChanged("IsPlaying"))
                    .RegisterHandler(n => n.ActualTime, n => base.RaisePropertyChanged("ActualTime"));
        }
示例#13
0
        public AddSalaryViewModel(EditableSalaryViewModel editableSalaryViewModel)
        {
            this.editableSalaryViewModel = editableSalaryViewModel;
            addCommand = new RelayCommand(Add);

            editableSalaryViewModelObserver = new PropertyObserver <EditableSalaryViewModel>(EditableSalaryViewModel);
            editableSalaryViewModelObserver.RegisterHandler(x => x.HasErrors, x => RefreshCommands());
            EditableSalaryViewModel.Validate();
        }
        public void RegisterHandlerNullTest2()
        {
            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };
            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.RegisterHandler(o => o.SValue, null);
        }
示例#15
0
        public MemoryReader()
        {
            state = State.NoSC2;
            scoreboard = MainWindowViewModel.DisplayWindow.Scoreboard;
            db = new Database("players.db");

            var t = new DispatcherTimer();
            t.Interval = TimeSpan.FromMilliseconds(500);
            t.Tick += new EventHandler(Tick);
            t.Start();

            player1Observer = new PropertyObserver<Model.Player>(scoreboard.Player1);
            player1Observer.RegisterHandler(n => n.Name, OnNameChanged);
            player1Observer.RegisterHandler(n => n.Race, OnRaceChanged);

            player2Observer = new PropertyObserver<Model.Player>(scoreboard.Player2);
            player2Observer.RegisterHandler(n => n.Name, OnNameChanged);
            player2Observer.RegisterHandler(n => n.Race, OnRaceChanged);
        }
        /// <summary>
        /// DataContext has been set or changed on the visual.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnDataChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            _optionObserver = null;
            if (ViewModel == null)
            {
                return;
            }

            _optionObserver = new PropertyObserver <RuntimeOptionsViewModel>(ViewModel.Options);
            _optionObserver.RegisterHandler(fe => fe.ShowRowNumbers, od => OnShowHideRowNumbers());
        }
示例#17
0
        public void RegisteredHandlersAreInvoked()
        {
            ObservableThing thing = new ObservableThing();
            PropertyObserver<ObservableThing> target = new PropertyObserver<ObservableThing>(thing);
            bool wasInvoked = false;
            target.RegisterHandler(t => t.SomeProperty, t => wasInvoked = (t == thing));

            thing.SomeProperty = "whatever";

            Assert.IsTrue(wasInvoked);
        }
示例#18
0
        public MemoryReader()
        {
            state      = State.NoSC2;
            scoreboard = MainWindowViewModel.DisplayWindow.Scoreboard;
            db         = new Database("players.db");

            var t = new DispatcherTimer();

            t.Interval = TimeSpan.FromMilliseconds(500);
            t.Tick    += new EventHandler(Tick);
            t.Start();

            player1Observer = new PropertyObserver <Model.Player>(scoreboard.Player1);
            player1Observer.RegisterHandler(n => n.Name, OnNameChanged);
            player1Observer.RegisterHandler(n => n.Race, OnRaceChanged);

            player2Observer = new PropertyObserver <Model.Player>(scoreboard.Player2);
            player2Observer.RegisterHandler(n => n.Name, OnNameChanged);
            player2Observer.RegisterHandler(n => n.Race, OnRaceChanged);
        }
示例#19
0
        public void UnregisteredHandlersAreNotInvoked()
        {
            ObservableThing thing = new ObservableThing();
            PropertyObserver <ObservableThing> target = new PropertyObserver <ObservableThing>(thing);
            bool wasInvoked = false;

            target.RegisterHandler(t => t.SomeProperty, t => wasInvoked = true);
            target.UnregisterHandler(t => t.SomeProperty);
            thing.SomeProperty = "whatever";

            Assert.IsFalse(wasInvoked);
        }
示例#20
0
        public void HandlePropertyChangedEvents()
        {
            bool       valueChanged = false;
            bool       textChanged  = false;
            DummyClass source       = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler("Value", src => valueChanged        = true);
            observer.RegisterHandler(src => src.Text, src => textChanged = true);

            Assert.IsFalse(valueChanged);
            Assert.IsFalse(textChanged);

            source.Value = 10;
            Assert.IsTrue(valueChanged);
            Assert.IsFalse(textChanged);
            valueChanged = false;

            source.Text = "abc";
            Assert.IsFalse(valueChanged);
            Assert.IsTrue(textChanged);
            textChanged = false;

            source.RaisePropertyChanged();
            Assert.IsTrue(valueChanged);
            Assert.IsTrue(textChanged);
            valueChanged = false;
            textChanged  = false;

            observer.UnregisterHandler("Value");
            source.RaisePropertyChanged();
            Assert.IsFalse(valueChanged);
            Assert.IsTrue(textChanged);
            textChanged = false;

            observer.UnregisterHandler(src => src.Text);
            source.RaisePropertyChanged();
            Assert.IsFalse(valueChanged);
            Assert.IsFalse(textChanged);
        }
示例#21
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConfigPresenter"/> class.
        /// </summary>
        /// <param name="config">The config.</param>
        public ConfigPresenter(ConfigProperties config, IEventAggregator eventAggregator)
        {
            _config         = config;
            _configObserver = new PropertyObserver <ConfigProperties>(_config);
            _configObserver.RegisterHandler(o => o.RequiredImpactLevel, o => OnPropertyChanged("RequiredImpactLevel"));
            _configObserver.RegisterHandler(o => o.ContactSensorRequired, o => OnPropertyChanged("ContactSensorRequired"));

            RegisterChungCommand = new DelegateCommand <object>(obj =>
            {
                eventAggregator.GetEvent <RemoteEvents.ButtonPressed>().Publish(RemoteEvents.Buttons.RegisterChung);
            });

            RegisterHongCommand = new DelegateCommand <object>(obj =>
            {
                eventAggregator.GetEvent <RemoteEvents.ButtonPressed>().Publish(RemoteEvents.Buttons.RegisterHong);
            });

            RegisterTargetCommand = new DelegateCommand <object>(obj =>
            {
                eventAggregator.GetEvent <RemoteEvents.ButtonPressed>().Publish(RemoteEvents.Buttons.RegisterTarget);
            });
        }
示例#22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConfigPresenter"/> class.
        /// </summary>
        /// <param name="config">The config.</param>
        public ConfigPresenter(ConfigProperties config, IEventAggregator eventAggregator)
        {
            _config = config;
            _configObserver = new PropertyObserver<ConfigProperties>(_config);
            _configObserver.RegisterHandler(o => o.RequiredImpactLevel, o => OnPropertyChanged("RequiredImpactLevel"));
            _configObserver.RegisterHandler(o => o.ContactSensorRequired, o => OnPropertyChanged("ContactSensorRequired"));

            RegisterChungCommand = new DelegateCommand<object>(obj =>
            {
                eventAggregator.GetEvent<RemoteEvents.ButtonPressed>().Publish(RemoteEvents.Buttons.RegisterChung);
            });

            RegisterHongCommand = new DelegateCommand<object>(obj =>
            {
                eventAggregator.GetEvent<RemoteEvents.ButtonPressed>().Publish(RemoteEvents.Buttons.RegisterHong);
            });

            RegisterTargetCommand = new DelegateCommand<object>(obj =>
            {
                eventAggregator.GetEvent<RemoteEvents.ButtonPressed>().Publish(RemoteEvents.Buttons.RegisterTarget);
            });
        }
示例#23
0
        public void HandlePropertyChangedEvents()
        {
            bool valueChanged = false;
            bool textChanged = false;
            DummyClass source = new DummyClass();
            PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
            observer.RegisterHandler("Value", src => valueChanged = true);
            observer.RegisterHandler(src => src.Text, src => textChanged = true);

            Assert.IsFalse(valueChanged);
            Assert.IsFalse(textChanged);

            source.Value = 10;
            Assert.IsTrue(valueChanged);
            Assert.IsFalse(textChanged);
            valueChanged = false;

            source.Text = "abc";
            Assert.IsFalse(valueChanged);
            Assert.IsTrue(textChanged);
            textChanged = false;

            source.RaisePropertyChanged();
            Assert.IsTrue(valueChanged);
            Assert.IsTrue(textChanged);
            valueChanged = false;
            textChanged = false;

            observer.UnregisterHandler("Value");
            source.RaisePropertyChanged();
            Assert.IsFalse(valueChanged);
            Assert.IsTrue(textChanged);
            textChanged = false;

            observer.UnregisterHandler(src => src.Text);
            source.RaisePropertyChanged();
            Assert.IsFalse(valueChanged);
            Assert.IsFalse(textChanged);
        }
        public void RegisterAllPropsHandler()
        {
            bool       calledPropChange = false;
            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };
            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.RegisterHandler(o => o.SValue, (oo) => calledPropChange = true);

            obj.ForceAllPropertyChange();
            Assert.IsTrue(calledPropChange);
        }
示例#25
0
        public void SourceIsWeakReference()
        {
            bool       valueChanged = false;
            bool       textChanged  = false;
            DummyClass source       = new DummyClass();
            PropertyObserver <DummyClass> observer = new PropertyObserver <DummyClass>(source);

            observer.RegisterHandler("Value", src => valueChanged        = true);
            observer.RegisterHandler(src => src.Text, src => textChanged = true);
            source.RaisePropertyChanged();
            Assert.IsTrue(valueChanged);
            Assert.IsTrue(textChanged);

            Assert.IsFalse(_dummyClassFinalized);
            source = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsTrue(_dummyClassFinalized);

            observer.UnregisterHandler("Value");
            observer.UnregisterHandler(src => src.Text);
        }
示例#26
0
        public DirectoryViewModel()
        {
            ExecuteItemCommand = new DelegateCommand(ExecuteExecuteItem, CanExecuteExecuteItem);
            History = new History<IDirectoryViewItem>();
            FileSystem = new WindowsFileSystem();

            propObserver = new PropertyObserver<DirectoryViewModel>(this);
            propObserver.RegisterHandler(x => x.SearchText, ManageSearch);

            fileSystemWatcher = new FileSystemWatcher { IncludeSubdirectories = false, };
            fileSystemWatcher.Created += fileSystemWatcher_Changed;
            fileSystemWatcher.Renamed += fileSystemWatcher_Changed;
            fileSystemWatcher.Deleted += fileSystemWatcher_Changed;
        }
        public void RegisterHandlerTest()
        {
            int    actualInt   = 0;
            string actualValue = null;

            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };

            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.RegisterHandler(o => o.SValue, (oo) => actualValue = oo.SValue);
            po.RegisterHandler(o => o.IValue, (oo) => actualInt   = oo.IValue);

            obj.SValue = "1";
            Assert.AreEqual("1", actualValue);
            obj.IValue = 5;
            Assert.AreEqual(5, actualInt);

            po.UnregisterHandler(o => o.SValue);
            obj.SValue = "2";
            Assert.AreEqual("1", actualValue);
        }
示例#28
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="parent">Alignment view parent</param>
        public BirdsEyeViewModel(AlignmentViewModel parent)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            Title        = "Birds Eye Viewer";
            ImageUrl     = "/Bio.Views.Alignment;component/images/bev_icon.png";
            _parent      = parent;
            _dataChanged = new PropertyObserver <AlignmentViewModel>(_parent);
            _dataChanged.RegisterHandler(v => v.TotalRows, v => StartBevGeneration());
            Entities = _parent.GroupedEntities;
            StartBevGeneration();
        }
示例#29
0
        public DirectoryViewModel()
        {
            ExecuteItemCommand = new DelegateCommand(ExecuteExecuteItem, CanExecuteExecuteItem);
            History            = new History <IDirectoryViewItem>();
            FileSystem         = new WindowsFileSystem();

            propObserver = new PropertyObserver <DirectoryViewModel>(this);
            propObserver.RegisterHandler(x => x.SearchText, ManageSearch);

            fileSystemWatcher = new FileSystemWatcher {
                IncludeSubdirectories = false,
            };
            fileSystemWatcher.Created += fileSystemWatcher_Changed;
            fileSystemWatcher.Renamed += fileSystemWatcher_Changed;
            fileSystemWatcher.Deleted += fileSystemWatcher_Changed;
        }
        public void UnregisterHandlerTest()
        {
            string actualValue = null;

            TestObject obj = new TestObject {
                SValue = "Test String", IValue = 10
            };
            WeakReference wr = new WeakReference(obj);

            PropertyObserver <TestObject> po = new PropertyObserver <TestObject>(obj);

            po.RegisterHandler(o => o.SValue, (oo) => actualValue = oo.SValue);

            obj.SValue = "1";
            Assert.AreEqual("1", actualValue);

            po.UnregisterHandler(o => o.SValue);
            obj.SValue = "2";
            Assert.AreEqual("1", actualValue);
        }
示例#31
0
        public void TestWeakReference()
        {
            // in .NET Core, WeakReferences have to be created in a different scope than
            // where they're used in order for the Garbage Collector to act on them.
            var createWeakReferenceTester = (PropertyObserverTests owner) =>
            {
                var tester = new WeakReferenceTester <WeakReferenceHelper>(() => new WeakReferenceHelper(owner));
                _observer.RegisterHandler("NewProperty", tester.Target.SourcePropertyChanged);
                return(tester);
            };

            var tester = createWeakReferenceTester(this);

            _source.NewProperty = "Hello";
            Assert.That(_propertyChanged, Is.EqualTo("NewProperty"));

            tester.Expire();
            _propertyChanged = null;

            _source.NewProperty = "Goodbye";
            Assert.That(_propertyChanged, Is.Null);
        }
示例#32
0
        private void OnStartLottery(object sender, ElapsedEventArgs e)
        {
            if (_lotteryService.GetRecordCount() < 1)
            {
                return;
            }

            _isLotterying = true;
            base.EnableFunction();

            _currentParticipant.Clear();

            if (RandomCmd)
            {
                LotteryCmd = CommonHelper.GetRandomString(3, true, true);
            }

            SdtdConsole.Instance.SendGlobalMessage(FormatCmd(null, StartLotteryTips));

            if (Timer2 == null)
            {
                Timer2 = new Timer()
                {
                    AutoReset = false, Interval = LotteryDuration * 1000
                };
                Timer2.Elapsed += OnEndLottery;

                _currentViewModelObserver = new PropertyObserver <LotterySystemViewModel>(this);
                _currentViewModelObserver.RegisterHandler(currentViewModel => currentViewModel.LotteryDuration,
                                                          (vm) =>
                {
                    if (LotteryDuration > 0)
                    {
                        Timer2.Interval = LotteryDuration * 1000;
                    }
                });
            }
            Timer2.Start();
        }
示例#33
0
 public void RegisterShouldThrowWhenHandlerIsNull()
 {
     DummyClass source = new DummyClass();
     PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
     observer.RegisterHandler("Value", null);
 }
示例#34
0
 public void Setup()
 {
     _source   = new TestPropertyChangedObject();
     _observer = new PropertyObserver <TestPropertyChangedObject>(_source);
     _observer.RegisterHandler("ClassicProperty", SourcePropertyChanged);
 }
示例#35
0
        public LotterySystemViewModel(IDispatcherService dispatcherService, string functionTag,
                                      IDialogService dialogService, ScoreInfoService scoreInfoService, LotteryService lotteryService) : base(dispatcherService, functionTag)
        {
            _dialogService    = dialogService;
            _scoreInfoService = scoreInfoService;
            _lotteryService   = lotteryService;

            Timer1 = new Timer()
            {
                AutoReset = true, Interval = LotteryInterval * 1000
            };
            Timer1.Elapsed += OnStartLottery;

            _currentViewModelObserver = new PropertyObserver <LotterySystemViewModel>(this);
            _currentViewModelObserver.RegisterHandler(currentViewModel => currentViewModel.LotteryInterval,
                                                      (vm) =>
            {
                if (LotteryInterval > 0)
                {
                    Timer1.Interval = LotteryInterval * 1000;
                    Timer1.Enabled  = true;
                }
            });

            DataGridItemChanged = new RelayCommand <DataGridItemChangedEventArgs>(OnDataGridItemChanged);

            RefreshList = new RelayCommand(PrivateRefreshList);

            RemoveItem = new RelayCommand(() =>
            {
                if (_dialogService.ShowOKCancel("确定删除选中数据吗?"))
                {
                    _ = _lotteryService.RemoveAsync(SelectedItem);
                    LotteryItems.Remove(SelectedItem);
                }
            }, () => { return(SelectedItem != null); });

            RemoveAll = new RelayCommand(() =>
            {
                if (_dialogService.ShowOKCancel("确定删除所有数据吗?"))
                {
                    _            = _lotteryService.RemoveAllAsync();
                    LotteryItems = null;
                }
            }, () => { return(LotteryItems != null); });

            AddData = new RelayCommand(() =>
            {
                var dto = new LotteryDto()
                {
                    LotteryName = LotteryName,
                    Content     = Content,
                    Amount      = Amount,
                    Quality     = Quality,
                    LotteryType = LotteryType
                };
                _ = _lotteryService.AddAsync(dto);
                LotteryItems.Add(dto);
            });

            AddAvailableVariables();

            PrivateRefreshList();
        }
示例#36
0
 public void RegisterShouldThrowWhenPropertyIsEmpty()
 {
     DummyClass source = new DummyClass();
     PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
     observer.RegisterHandler("", src => { });
 }
示例#37
0
 public void RegisterShouldThrowWhenPropertyIsNull()
 {
     DummyClass source = new DummyClass();
     PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
     observer.RegisterHandler((string)null, src => { });
 }
示例#38
0
        public void SourceIsWeakReference()
        {
            bool valueChanged = false;
            bool textChanged = false;
            DummyClass source = new DummyClass();
            PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
            observer.RegisterHandler("Value", src => valueChanged = true);
            observer.RegisterHandler(src => src.Text, src => textChanged = true);
            source.RaisePropertyChanged();
            Assert.IsTrue(valueChanged);
            Assert.IsTrue(textChanged);

            Assert.IsFalse(_dummyClassFinalized);
            source = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            Assert.IsTrue(_dummyClassFinalized);

            observer.UnregisterHandler("Value");
            observer.UnregisterHandler(src => src.Text);
        }
示例#39
0
 public void RegisterShouldThrowWhenPropertyIsWrong()
 {
     DummyClass source = new DummyClass();
     PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
     observer.RegisterHandler("Misspelled Property", src => { });
 }
示例#40
0
 public void RegisterShouldThrowWhenExpressionIsNull()
 {
     DummyClass source = new DummyClass();
     PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
     observer.RegisterHandler((Expression<Func<DummyClass, object>>)null, src => { });
 }
示例#41
0
 public void RegisterShouldThrowWhenExpressionWrong()
 {
     DummyClass source = new DummyClass();
     PropertyObserver<DummyClass> observer = new PropertyObserver<DummyClass>(source);
     observer.RegisterHandler(src => src, src => { });
 }