Exemple #1
0
        public void ExternalSetupTest()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();

            container.RegisterAutoNotifyType <PureViewModel>();

            Expression <Func <PureViewModel, string> >[] namesSelector = { v => v.FirstName, v => v.LastName };

            AutoNotifySetup <PureViewModel> .Invoke(v => v.OnAgeChanged).By(v => v.Age);

            AutoNotifySetup <PureViewModel> .Invoke(v => v.OnAgeChanged2).By(v => v.Age);

            AutoNotifySetup <PureViewModel> .Notify(v => v.FullName).By(namesSelector);

            AutoNotifySetup <PureViewModel> .Notify(v => v.Error).By(namesSelector);

            AutoNotifySetup <PureViewModel> .Invalidate(v => v.OkCommand).By(namesSelector);

            var viewModel = container.Resolve <PureViewModel>();

            viewModel.FirstName.Should().BeNull();
            viewModel.LastName.Should().BeNull();
            viewModel.Error.Should().Be("FirstName cannot be empty");
            viewModel.OkCommand.CanExecute(null).Should().BeFalse();

            var changedLog = new List <string>();

            viewModel.PropertyChanged             += (s, e) => changedLog.Add(e.PropertyName);
            viewModel.OkCommand.CanExecuteChanged += (s, e) => changedLog.Add("OkCommandCanExecuteChanged");
            viewModel.FirstName = "Jason";
            changedLog.Should().BeEquivalentTo(new [] { "FirstName", "FullName", "Error", "OkCommandCanExecuteChanged" });
            viewModel.Error.Should().Be("LastName cannot be empty");
            viewModel.OkCommand.CanExecute(null).Should().BeTrue();

            var invokedLog = new List <MethodInvokedEventArgs>();

            ((IMethodAutoInvoked)viewModel).MethodInvoked += (s, e) => invokedLog.Add(e);
            viewModel.Age = viewModel.Age + 1;
            invokedLog.Count.Should().Be(2);
            invokedLog[0].Name.Should().Be("OnAgeChanged");
            var context = invokedLog[0].InvokeContext;

            context.Property.Should().Be("Age");
            context.OldValue <int>().Should().Be(0);
            context.NewValue <int>().Should().Be(1);
            invokedLog[1].Name.Should().Be("OnAgeChanged2");
            invokedLog[1].InvokeContext.Should().BeNull();
        }
Exemple #2
0
        public void SelfNotifyTest()
        {
            var container = new UnityContainer();

            container.AddNewExtension <Interception>();

            container.RegisterAutoNotifyType <ViewModel>();

            var viewModel   = container.Resolve <ViewModel>();
            var changedLog  = new List <string>();
            var changingLog = new List <string>();

            viewModel.PropertyChanged  += (s, e) => changedLog.Add(e.PropertyName);
            viewModel.PropertyChanging += (s, e) => changingLog.Add(e.PropertyName);
            viewModel.Age = viewModel.Age + 1;
            changedLog.Count.Should().Be(2);
            changedLog[0].Should().Be("Age");
            changedLog[1].Should().Be("FullNameSelfNotify");
            changingLog.Count.Should().Be(1);
            changingLog[0].Should().Be("Age");
        }