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(); }
protected static InvalidateBy <T> Invalidate <TProperty>(Expression <Func <T, TProperty> > selector) { return(AutoNotifySetup <T> .Invalidate(selector)); }
protected static InvokeBy <T> Invoke(Expression <Func <T, Action> > selector) { return(AutoNotifySetup <T> .Invoke(selector)); }
protected static NotifyBy <T> Notify <TProperty>(Expression <Func <T, TProperty> > selector) { return(AutoNotifySetup <T> .Notify(selector)); }