コード例 #1
0
        public void HandlesEventWithCommandAndEventArgsConverterAndEventArgsConverterParameter()
        {
            const string foobar = "foobar";

            var converter = new Mock <IValueConverter>();

            converter.Setup(c => c.Convert(It.IsAny <object>(), It.IsAny <Type>(), It.IsAny <object>(), It.IsAny <CultureInfo>()))
            .Returns <object, Type, object, CultureInfo>((v, t, p, c) =>
            {
                return(((TextChangedEventArgs)v).NewTextValue.Length + p.ToString().Length);
            });

            int textLength = 0;

            var behavior = new EventToCommandBehavior
            {
                EventName                   = "TextChanged",
                Command                     = new Command <int>(len => textLength = len),
                EventArgsConverter          = converter.Object,
                EventArgsConverterParameter = foobar
            };

            var entry = new Entry();

            entry.Behaviors.Add(behavior);
            entry.Text = foobar;
            entry.Behaviors.Remove(behavior);

            Assert.Equal(foobar.Length * 2, textLength);
        }
コード例 #2
0
 public static TView BindEventCommand <TView>(this TView view, EventToCommandBehavior behaviorCommand, bool ReturnEventArgs = false) where TView : VisualElement
 {
     if (!ReturnEventArgs)
     {
         behaviorCommand.CommandParameter = view;
     }
     view.Behaviors.Add(behaviorCommand);
     return(view);
 }
コード例 #3
0
        public void NoExceptionIfSpecifiedEventExists()
        {
            var listView = new ListView();
            var behavior = new EventToCommandBehavior
            {
                EventName = nameof(ListView.ItemTapped)
            };

            listView.Behaviors.Add(behavior);
        }
コード例 #4
0
        public void NoExceptionIfAttachedToPage()
        {
            var page     = new ContentPage();
            var behavior = new EventToCommandBehavior
            {
                EventName = nameof(Page.Appearing)
            };

            page.Behaviors.Add(behavior);
        }
コード例 #5
0
        public void EventName_InvalidEventShouldThrow()
        {
            var behavior = new EventToCommandBehavior
            {
                EventName = "OnItemTapped"
            };
            var listView = new ListView();

            Assert.Throws <ArgumentException>(() => listView.Behaviors.Add(behavior));
        }
コード例 #6
0
        public void ArgumentExceptionIfSpecifiedEventDoesNotExist()
        {
            var listView = new ListView();
            var behavior = new EventToCommandBehavior
            {
                EventName = "Wrong Event Name"
            };

            Assert.Throws <ArgumentException>(() => listView.Behaviors.Add(behavior));
        }
コード例 #7
0
        public void EventName_Valid()
        {
            var behavior = new EventToCommandBehavior
            {
                EventName = "ItemTapped"
            };
            var listView = new ListView();

            listView.Behaviors.Add(behavior);
        }
コード例 #8
0
        private ListView CreateYearListView()
        {
            var YearListView = new ListView()
            {
                SelectionMode       = ListViewSelectionMode.Single,
                SeparatorVisibility = SeparatorVisibility.None,
                HorizontalOptions   = LayoutOptions.Center,
            };

            YearListView.SetBinding(ListView.ItemsSourceProperty, new Binding()
            {
                Source = DataContext,
                Path   = "YearList"
            });
            YearListView.SetBinding(ListView.SelectedItemProperty, new Binding()
            {
                Source = DataContext,
                Path   = "SelectedYear",
                Mode   = BindingMode.TwoWay
            });

            YearListView.ItemTemplate = new DataTemplate(() =>
            {
                return(new ViewCell()
                {
                    View = CreateTemplateListYearNumberLabel(),
                });
            });

            var ItemSelectedEvent = new EventToCommandBehavior()
            {
                EventName = "ItemSelected",
                Converter = new SelectedItemEventArgsToSelectedItemConverter(),
            };

            ItemSelectedEvent.SetBinding(EventToCommandBehavior.CommandProperty, new Binding()
            {
                Path = "YearSelectedCommand"
            });
            YearListView.Behaviors.Add(ItemSelectedEvent);

            var ItemTappedEvent = new EventToCommandBehavior()
            {
                EventName = "ItemTapped"
            };

            ItemTappedEvent.SetBinding(EventToCommandBehavior.CommandProperty, new Binding()
            {
                Path = "YearListTapped"
            });
            YearListView.Behaviors.Add(ItemTappedEvent);

            return(YearListView);
        }
コード例 #9
0
        public async Task ResolvesParentElementFrom_EventToCommandBehavior()
        {
            var app = CreateMockApplication();

            Log.Listeners.Clear();
            var logObserver = new FormsLogObserver();

            Log.Listeners.Add(logObserver);

            var behavior = new EventToCommandBehavior()
            {
                EventName = "ItemTapped"
            };
            var layout = new ListView();

            layout.Behaviors.Add(behavior);

            var serviceProvider = new XamlServiceProvider();

            serviceProvider.Add(typeof(IProvideValueTarget), new XamlValueTargetProvider(behavior, "Command"));

            var navigateExtension = new NavigateToExtension()
            {
                Name = "/AutowireView"
            };

            navigateExtension.ProvideValue(serviceProvider);

            app.MainPage = new NavigationPage(new ContentPage
            {
                Content = layout
            });

            Assert.NotNull(layout.Parent);
            Assert.IsType <ContentPage>(layout.Parent);

            Assert.NotNull(navigateExtension.SourcePage);
            Assert.True(navigateExtension.CanExecute(null));
            var ex = await Record.ExceptionAsync(async() =>
            {
                navigateExtension.Execute(null);
                if (navigateExtension.IsNavigating)
                {
                    await Task.Delay(100);
                }
            });

            Assert.Null(ex);
            Assert.Empty(logObserver.Logs);

            Assert.IsType <AutowireView>(app.MainPage);
        }
コード例 #10
0
        public void EnsureThatEventExists()
        {
            var behavior = new EventToCommandBehavior
            {
                EventName = "EventThatDoesNotExists"
            };

            var entry = new Entry();

            var ex = Assert.Throws <ArgumentException>(() => entry.Behaviors.Add(behavior));

            Assert.Equal("EventToCommand: Cannot find any event named 'EventThatDoesNotExists' on attached type", ex.Message);
        }
コード例 #11
0
        public void EnsureThatEventNameIsMandatory()
        {
            var behavior = new EventToCommandBehavior
            {
                EventName = null
            };

            var entry = new Entry();

            var ex = Assert.Throws <ArgumentException>(() => entry.Behaviors.Add(behavior));

            Assert.Equal("EventToCommand: EventName must be specified", ex.Message);
        }
コード例 #12
0
        public void EnsureThatDoNothingWhenCommandIsNull()
        {
            var behavior = new EventToCommandBehavior
            {
                EventName = "TextChanged",
                Command   = null
            };

            var entry = new Entry();

            entry.Behaviors.Add(behavior);
            entry.Text = "foobar";
        }
コード例 #13
0
        public void ParameterOfTypeInt()
        {
            var vm       = new ViewModelCoffe();
            var behavior = new EventToCommandBehavior <int>
            {
                EventName        = nameof(ListView.ItemTapped),
                Command          = vm.SelectedCommand,
                CommandParameter = 2
            };

            var nullArgs = new object?[] { null, null };

            TriggerEventToCommandBehavior(behavior, nullArgs);
        }
コード例 #14
0
        public void NoExceptionWhenTheSelectedItemIsNull()
        {
            var vm       = new ViewModelCoffe();
            var behavior = new EventToCommandBehavior <Coffee>
            {
                EventName          = nameof(ListView.ItemTapped),
                EventArgsConverter = new ItemSelectedEventArgsConverter(),
                Command            = vm.SelectedCommand
            };

            Assert.Null(vm.CoffeeName);
            var coffeNull   = default(Coffee);
            var notNullArgs = new object?[] { null, new SelectedItemChangedEventArgs(coffeNull, -1) };

            TriggerEventToCommandBehavior(behavior, notNullArgs);

            Assert.Null(vm.CoffeeName);
        }
コード例 #15
0
        public void HandlesEventWithCommand()
        {
            bool textChanged = false;

            var behavior = new EventToCommandBehavior
            {
                EventName = "TextChanged",
                Command   = new Command(() => textChanged = true)
            };

            var entry = new Entry();

            entry.Behaviors.Add(behavior);
            entry.Text = "foobar";
            entry.Behaviors.Remove(behavior);

            Assert.True(textChanged);
        }
コード例 #16
0
        public void SpecifyCommandParameterManuallyOverridesEventArgs()
        {
            object result = null;

            var behavior = new EventToCommandBehavior
            {
                EventName        = "TextChanged",
                Command          = new Command <object>(parameter => result = parameter),
                CommandParameter = "dummy value that will be set to the return variable"
            };

            var entry = new Entry();

            entry.Behaviors.Add(behavior);
            entry.Text = "foobar";

            Assert.Same(result, behavior.CommandParameter);
        }
コード例 #17
0
        public DataGridHeader()
        {
            var tapGestureRecognizer = new TapGestureRecognizer
            {
                NumberOfTapsRequired = 1
            };

            tapGestureRecognizer.Tapped += (s, e) =>
            {
                etcb.Command = (this.BindingContext as ViewModelBase).SortedCommand;
                Clicked?.Invoke(s, EventArgs.Empty);
            };
            this.GestureRecognizers.Add(tapGestureRecognizer);

            etcb                  = new EventToCommandBehavior();
            etcb.EventName        = "Clicked";
            etcb.CommandParameter = this;
            this.Behaviors.Add(etcb);
        }
コード例 #18
0
        public void CallCommand_OnItemSelected()
        {
            bool isCalled = false;

            var service = new EventToCommandBehavior();

            service.EventName = "ItemSelected";
            service.Command   = new Command(() =>
            {
                isCalled = true;
            });

            var c = new ListView();

            c.Behaviors.Add(service);

            c.SelectedItem = "new item";

            Assert.IsTrue(isCalled);
        }
コード例 #19
0
        public void NoExceptionWhenTheEventArgsAreNotNull_InheritedType()
        {
            var vm       = new ViewModelCoffe();
            var behavior = new EventToCommandBehavior <Coffee>
            {
                EventName          = nameof(ListView.ItemTapped),
                EventArgsConverter = new ItemSelectedEventArgsConverter(),
                Command            = vm.SelectedCommand
            };

            Assert.Null(vm.CoffeeName);
            var coffe = new Starbucks {
                Id = 1, Name = "Latte"
            };
            var eventArgs = new SelectedItemChangedEventArgs(coffe, 1);

            var notNullArgs = new object?[] { null, eventArgs };

            TriggerEventToCommandBehavior(behavior, notNullArgs);

            Assert.AreEqual(coffe.Name, vm.CoffeeName);
        }
コード例 #20
0
        public void HandlesEventWithCommandAndEventArgsConverter()
        {
            var converter = new Mock <IValueConverter>();

            converter.Setup(c => c.Convert(It.IsAny <object>(), It.IsAny <Type>(), It.IsAny <object>(), It.IsAny <CultureInfo>()))
            .Returns <object, Type, object, CultureInfo>((v, t, p, c) => ((TextChangedEventArgs)v).NewTextValue.Length);

            int textLength = 0;

            var behavior = new EventToCommandBehavior
            {
                EventName          = "TextChanged",
                Command            = new Command <int>(len => textLength = len),
                EventArgsConverter = converter.Object
            };

            var entry = new Entry();

            entry.Behaviors.Add(behavior);
            entry.Text = "foobar";
            entry.Behaviors.Remove(behavior);

            Assert.True(textLength > 0);
        }
コード例 #21
0
ファイル: CarPage.cs プロジェクト: XiaoBaiXJ/RFID
        private void InitializeComponent()
        {
            if (ResourceLoader.ResourceProvider != null && ResourceLoader.ResourceProvider(typeof(CarPage).GetTypeInfo().Assembly.GetName(), "Views/CarPage.xaml") != null)
            {
                this.__InitComponentRuntime();
                return;
            }
            if (XamlLoader.XamlFileProvider != null && XamlLoader.XamlFileProvider(base.GetType()) != null)
            {
                this.__InitComponentRuntime();
                return;
            }
            BindingExtension       bindingExtension       = new BindingExtension();
            RowDefinition          rowDefinition          = new RowDefinition();
            RowDefinition          rowDefinition2         = new RowDefinition();
            ColumnDefinition       columnDefinition       = new ColumnDefinition();
            ColumnDefinition       columnDefinition2      = new ColumnDefinition();
            BindingExtension       bindingExtension2      = new BindingExtension();
            TranslateExtension     translateExtension     = new TranslateExtension();
            BindingExtension       bindingExtension3      = new BindingExtension();
            BindingExtension       bindingExtension4      = new BindingExtension();
            EventToCommandBehavior eventToCommandBehavior = new EventToCommandBehavior();
            SearchBar            searchBar            = new SearchBar();
            BindingExtension     bindingExtension5    = new BindingExtension();
            BindingExtension     bindingExtension6    = new BindingExtension();
            TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer();
            SvgCachedImage       svgCachedImage       = new SvgCachedImage();
            Grid                   grid = new Grid();
            BindingExtension       bindingExtension7       = new BindingExtension();
            BindingExtension       bindingExtension8       = new BindingExtension();
            EventToCommandBehavior eventToCommandBehavior2 = new EventToCommandBehavior();
            DataTemplate           dataTemplate            = new DataTemplate();
            ListView               listView           = new ListView();
            Grid                   grid2              = new Grid();
            BindingExtension       bindingExtension9  = new BindingExtension();
            BindingExtension       bindingExtension10 = new BindingExtension();
            ActivityIndicator      activityIndicator  = new ActivityIndicator();
            Grid                   grid3              = new Grid();
            NameScope              nameScope          = new NameScope();

            NameScope.SetNameScope(this, nameScope);
            NameScope.SetNameScope(grid3, nameScope);
            NameScope.SetNameScope(grid2, nameScope);
            NameScope.SetNameScope(rowDefinition, nameScope);
            NameScope.SetNameScope(rowDefinition2, nameScope);
            NameScope.SetNameScope(grid, nameScope);
            NameScope.SetNameScope(columnDefinition, nameScope);
            NameScope.SetNameScope(columnDefinition2, nameScope);
            NameScope.SetNameScope(searchBar, nameScope);
            NameScope.SetNameScope(eventToCommandBehavior, nameScope);
            NameScope.SetNameScope(svgCachedImage, nameScope);
            NameScope.SetNameScope(tapGestureRecognizer, nameScope);
            NameScope.SetNameScope(listView, nameScope);
            ((INameScope)nameScope).RegisterName("listview", listView);
            if (listView.StyleId == null)
            {
                listView.StyleId = "listview";
            }
            NameScope.SetNameScope(eventToCommandBehavior2, nameScope);
            NameScope.SetNameScope(activityIndicator, nameScope);
            this.listview = listView;
            this.SetValue(ViewModelLocator.AutowireViewModelProperty, new bool?(true));
            bindingExtension.Path = "Title";
            BindingBase binding = ((IMarkupExtension <BindingBase>)bindingExtension).ProvideValue(null);

            this.SetBinding(Page.TitleProperty, binding);
            rowDefinition.SetValue(RowDefinition.HeightProperty, new GridLengthTypeConverter().ConvertFromInvariantString("Auto"));
            grid2.GetValue(Grid.RowDefinitionsProperty).Add(rowDefinition);
            rowDefinition2.SetValue(RowDefinition.HeightProperty, new GridLengthTypeConverter().ConvertFromInvariantString("*"));
            grid2.GetValue(Grid.RowDefinitionsProperty).Add(rowDefinition2);
            grid.SetValue(Grid.RowProperty, 0);
            grid.SetValue(VisualElement.BackgroundColorProperty, Color.White);
            grid.SetValue(Xamarin.Forms.Layout.PaddingProperty, new Thickness(10.0));
            grid.SetValue(Grid.ColumnSpacingProperty, 10.0);
            columnDefinition.SetValue(ColumnDefinition.WidthProperty, new GridLengthTypeConverter().ConvertFromInvariantString("*"));
            grid.GetValue(Grid.ColumnDefinitionsProperty).Add(columnDefinition);
            columnDefinition2.SetValue(ColumnDefinition.WidthProperty, new GridLengthTypeConverter().ConvertFromInvariantString("24"));
            grid.GetValue(Grid.ColumnDefinitionsProperty).Add(columnDefinition2);
            searchBar.SetValue(Grid.ColumnProperty, 0);
            bindingExtension2.Path = "CarNo";
            BindingBase binding2 = ((IMarkupExtension <BindingBase>)bindingExtension2).ProvideValue(null);

            searchBar.SetBinding(SearchBar.TextProperty, binding2);
            translateExtension.Text = "search";
            IMarkupExtension    markupExtension     = translateExtension;
            XamlServiceProvider xamlServiceProvider = new XamlServiceProvider();
            Type typeFromHandle = typeof(IProvideValueTarget);

            object[] array = new object[0 + 5];
            array[0] = searchBar;
            array[1] = grid;
            array[2] = grid2;
            array[3] = grid3;
            array[4] = this;
            xamlServiceProvider.Add(typeFromHandle, new SimpleValueTargetProvider(array, SearchBar.PlaceholderProperty));
            xamlServiceProvider.Add(typeof(INameScopeProvider), new NameScopeProvider
            {
                NameScope = nameScope
            });
            Type typeFromHandle2 = typeof(IXamlTypeResolver);
            XmlNamespaceResolver xmlNamespaceResolver = new XmlNamespaceResolver();

            xmlNamespaceResolver.Add("", "http://xamarin.com/schemas/2014/forms");
            xmlNamespaceResolver.Add("x", "http://schemas.microsoft.com/winfx/2009/xaml");
            xmlNamespaceResolver.Add("prism", "clr-namespace:Prism.Mvvm;assembly=Prism.Forms");
            xmlNamespaceResolver.Add("local", "clr-namespace:RFID");
            xmlNamespaceResolver.Add("b", "clr-namespace:Prism.Behaviors;assembly=Prism.Forms");
            xmlNamespaceResolver.Add("svg", "clr-namespace:FFImageLoading.Svg.Forms;assembly=FFImageLoading.Svg.Forms");
            xamlServiceProvider.Add(typeFromHandle2, new XamlTypeResolver(xmlNamespaceResolver, typeof(CarPage).GetTypeInfo().Assembly));
            xamlServiceProvider.Add(typeof(IXmlLineInfoProvider), new XmlLineInfoProvider(new XmlLineInfo(22, 60)));
            object placeholder = markupExtension.ProvideValue(xamlServiceProvider);

            searchBar.Placeholder = placeholder;
            searchBar.SetValue(SearchBar.TextColorProperty, new Color(0.501960813999176, 0.501960813999176, 0.501960813999176, 1.0));
            bindingExtension3.Path = "SearchCommand";
            BindingBase binding3 = ((IMarkupExtension <BindingBase>)bindingExtension3).ProvideValue(null);

            searchBar.SetBinding(SearchBar.SearchCommandProperty, binding3);
            searchBar.SetValue(VisualElement.BackgroundColorProperty, new Color(0.93725490570068359, 0.93725490570068359, 0.93725490570068359, 1.0));
            eventToCommandBehavior.SetValue(EventToCommandBehavior.EventNameProperty, "TextChanged");
            bindingExtension4.Path = "SearchCommand";
            BindingBase binding4 = ((IMarkupExtension <BindingBase>)bindingExtension4).ProvideValue(null);

            eventToCommandBehavior.SetBinding(EventToCommandBehavior.CommandProperty, binding4);
            ((ICollection <Behavior>)searchBar.GetValue(VisualElement.BehaviorsProperty)).Add(eventToCommandBehavior);
            grid.Children.Add(searchBar);
            svgCachedImage.SetValue(Grid.ColumnProperty, 1);
            svgCachedImage.SetValue(VisualElement.WidthRequestProperty, 24.0);
            bindingExtension5.Path = "IsException";
            BindingBase binding5 = ((IMarkupExtension <BindingBase>)bindingExtension5).ProvideValue(null);

            svgCachedImage.SetBinding(VisualElement.IsVisibleProperty, binding5);
            svgCachedImage.SetValue(VisualElement.HeightRequestProperty, 24.0);
            svgCachedImage.SetValue(CachedImage.SourceProperty, new FFImageLoading.Forms.ImageSourceConverter().ConvertFromInvariantString("plus.svg"));
            bindingExtension6.Path = "AddCommand";
            BindingBase binding6 = ((IMarkupExtension <BindingBase>)bindingExtension6).ProvideValue(null);

            tapGestureRecognizer.SetBinding(TapGestureRecognizer.CommandProperty, binding6);
            svgCachedImage.GestureRecognizers.Add(tapGestureRecognizer);
            grid.Children.Add(svgCachedImage);
            grid2.Children.Add(grid);
            listView.SetValue(Grid.RowProperty, 1);
            listView.SetValue(VisualElement.BackgroundColorProperty, new Color(0.98039215803146362, 0.98039215803146362, 0.98039215803146362, 1.0));
            bindingExtension7.Path = "CarSource";
            BindingBase binding7 = ((IMarkupExtension <BindingBase>)bindingExtension7).ProvideValue(null);

            listView.SetBinding(ItemsView <Cell> .ItemsSourceProperty, binding7);
            listView.ItemSelected += this.Handle_ItemSelected;
            eventToCommandBehavior2.SetValue(EventToCommandBehavior.EventNameProperty, "ItemTapped");
            bindingExtension8.Path = "SelectCommand";
            BindingBase binding8 = ((IMarkupExtension <BindingBase>)bindingExtension8).ProvideValue(null);

            eventToCommandBehavior2.SetBinding(EventToCommandBehavior.CommandProperty, binding8);
            eventToCommandBehavior2.SetValue(EventToCommandBehavior.EventArgsParameterPathProperty, "Item");
            ((ICollection <Behavior>)listView.GetValue(VisualElement.BehaviorsProperty)).Add(eventToCommandBehavior2);
            IDataTemplate dataTemplate2 = dataTemplate;

            CarPage.< InitializeComponent > _anonXamlCDataTemplate_4 <InitializeComponent> _anonXamlCDataTemplate_ = new CarPage.< InitializeComponent > _anonXamlCDataTemplate_4();
            object[]  array2 = new object[0 + 5];
            array2[0] = dataTemplate;
            array2[1] = listView;
            array2[2] = grid2;
            array2[3] = grid3;
            array2[4] = this;
コード例 #22
0
        static void TriggerEventToCommandBehavior <T>(EventToCommandBehavior <T> eventToCommand, object?[] args)
        {
            var method = eventToCommand.GetType().GetMethod("OnTriggerHandled", BindingFlags.Instance | BindingFlags.NonPublic);

            method?.Invoke(eventToCommand, args);
        }