소스 검색

MobileTabStrip now allows images as well as text
Fixed Issues with Mobile Date and Time Buttons
MobileButtons now defaults to rounded corners
ICoreRepository.Search() now returns itself

Frank van den Bos 1 년 전
부모
커밋
c4145c17a1

+ 7 - 2
InABox.Core/CoreUtils.cs

@@ -85,6 +85,7 @@ namespace InABox.Core
         v20_2,
         v20_3,
         v22_1,
+        v23_1,
         Unspecified
     }
 
@@ -166,8 +167,12 @@ namespace InABox.Core
                     "NzY3MzEzQDMyMzAyZTMzMmUzMGR2bk5Bb1lOK2pJV2lLdys4YlVDMGViYUhCY21PM2xITTRWZlhYYmRlVm89;NzY3MzE0QDMyMzAyZTMzMmUzMG9vSEdIY1d1NDFPYjBGSnJMcTlQSmpMUzYwNk9HZUNXWHNJZWlXZloyT0U9"
                 },
                 {
-                        SyncfusionVersion.v22_1,
-                        "MjU0OTIyM0AzMjMyMmUzMDJlMzBhMTc2SkUzUFkyUzcyUFVhNzFLWDRCOElLTkVjQ2JQOG9zZ09CUTBuZjN3PQ==;MjU0OTIyNEAzMjMyMmUzMDJlMzBtaG5naUZPVVRwdENBWGRNSDdYK3orQ3NCcjVkYjRVUzQ4ZHoyRkloeStVPQ==;MjU0OTIyNUAzMjMyMmUzMDJlMzBtaG5naUZPVVRwdENBWGRNSDdYK3orQ3NCcjVkYjRVUzQ4ZHoyRkloeStVPQ=="
+                    SyncfusionVersion.v22_1,
+                    "MjU0OTIyM0AzMjMyMmUzMDJlMzBhMTc2SkUzUFkyUzcyUFVhNzFLWDRCOElLTkVjQ2JQOG9zZ09CUTBuZjN3PQ==;MjU0OTIyNEAzMjMyMmUzMDJlMzBtaG5naUZPVVRwdENBWGRNSDdYK3orQ3NCcjVkYjRVUzQ4ZHoyRkloeStVPQ==;MjU0OTIyNUAzMjMyMmUzMDJlMzBtaG5naUZPVVRwdENBWGRNSDdYK3orQ3NCcjVkYjRVUzQ4ZHoyRkloeStVPQ=="
+                },
+                {
+                    SyncfusionVersion.v23_1,
+                    "MjgwNDUxMkAzMjMzMmUzMDJlMzBlYjFtTGpVVkFBVjB5K0VXWXJBazhXa3htWGFQMnJuK0txb0VTL2EycmlBPQ==;MjgwNDUxM0AzMjMzMmUzMDJlMzBXTC9sRzg4aFV1VU1uS1F5a1UrZHdFSzMxaFFsYVpPbDlsc0F5OVNEVFhJPQ==;MjgwNDUxNEAzMjMzMmUzMDJlMzBXTC9sRzg4aFV1VU1uS1F5a1UrZHdFSzMxaFFsYVpPbDlsc0F5OVNEVFhJPQ=="
                 },
                 {
                     SyncfusionVersion.Unspecified,

+ 2 - 1
InABox.Mobile/InABox.Mobile.Shared/Components/MobileButton/MobileButton.xaml.cs

@@ -78,7 +78,8 @@ namespace InABox.Mobile
         public static readonly BindableProperty CornerRadiusProperty = BindableProperty.Create(
             nameof(CornerRadius), 
             typeof(float), 
-            typeof(MobileButton));
+            typeof(MobileButton),
+            5.0f);
         
         public float CornerRadius 
         {

+ 0 - 1
InABox.Mobile/InABox.Mobile.Shared/Components/MobileDateSelector/MobileDateSelector.xaml.cs

@@ -1,5 +1,4 @@
 using System;
-using Syncfusion.XForms.Pickers;
 using Xamarin.Forms.Xaml;
 
 namespace InABox.Mobile

+ 243 - 56
InABox.Mobile/InABox.Mobile.Shared/Components/MobileTabStrip/MobileTabStrip.xaml

@@ -3,9 +3,239 @@
 <ContentView xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:mobile="clr-namespace:InABox.Mobile;assembly=InABox.Mobile.Shared"
-             xmlns:ui="clr-namespace:XF.Material.Forms.UI;assembly=XF.Material"
              x:Class="InABox.Mobile.MobileTabStrip"
              x:DataType="mobile:MobileTabStrip">
+    
+    <ContentView.Resources>
+        <ResourceDictionary>
+            
+            <DataTemplate x:Key="VerticalTemplate" x:DataType="mobile:MobileTabStripItem">
+                <Frame
+                    Grid.Column="{Binding Index}"
+                    HasShadow="False" 
+                    Margin="0" 
+                    Padding="5"
+                    BorderColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    BackgroundColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    CornerRadius="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='CornerRadius'}"
+                    IsClippedToBounds="True"
+                    VerticalOptions="Fill"
+                    HorizontalOptions="Fill">
+                    
+                    <Frame.GestureRecognizers>
+                        <TapGestureRecognizer Tapped="DoTap"/>
+                    </Frame.GestureRecognizers>
+                    
+                    <Frame.Triggers>
+                        <DataTrigger TargetType="Frame" Binding="{Binding Selected}" Value="True">
+                            <Setter Property="BackgroundColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedBackground'}" />
+                        </DataTrigger>
+                    </Frame.Triggers>
+                    
+                    <Grid>
+                        
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="Auto"/>
+                        </Grid.RowDefinitions>
+                        
+                        <Image
+                            x:Name="_image"
+                            Source="{Binding Image}"
+                            Grid.Row="0"
+                            Aspect="AspectFit"
+                            BackgroundColor="Transparent"
+                            HeightRequest="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ImageSize.Height'}"
+                            WidthRequest="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ImageSize.Width'}">
+                            <Image.GestureRecognizers>
+                                <TapGestureRecognizer Tapped="DoTap"/>
+                            </Image.GestureRecognizers>
+                        </Image>
+                        
+                        <Label 
+                            x:Name="_label"
+                            Text="{Binding Text}"
+                            Grid.Row="1"
+                            FontSize="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontSize'}" 
+                            FontAttributes="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontAttributes'}"
+                            HorizontalTextAlignment="Center" 
+                            VerticalTextAlignment="Center" 
+                            BackgroundColor="Transparent"
+                            TextColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedForeground'}">
+                            <Label.GestureRecognizers>
+                                <TapGestureRecognizer Tapped="DoTap" />
+                            </Label.GestureRecognizers>
+                            <Label.Triggers>
+                                <DataTrigger TargetType="Label" Binding="{Binding Selected}" Value="True">
+                                    <Setter Property="TextColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedForeground'}" />
+                                </DataTrigger>
+                            </Label.Triggers>
+                        </Label> 
+                        
+                    </Grid>
+                </Frame>
+            </DataTemplate>
+            
+            <DataTemplate x:Key="HorizontalTemplate" x:DataType="mobile:MobileTabStripItem">
+                <Frame
+                    Grid.Column="{Binding Index}"
+                    HasShadow="False" 
+                    Margin="0" 
+                    Padding="5"
+                    BorderColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    BackgroundColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    CornerRadius="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='CornerRadius'}"
+                    IsClippedToBounds="True"
+                    VerticalOptions="Fill"
+                    HorizontalOptions="Fill">
+                    
+                    <Frame.GestureRecognizers>
+                        <TapGestureRecognizer Tapped="DoTap"/>
+                    </Frame.GestureRecognizers>
+                    
+                    <Frame.Triggers>
+                        <DataTrigger TargetType="Frame" Binding="{Binding Selected}" Value="True">
+                            <Setter Property="BackgroundColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedBackground'}" />
+                        </DataTrigger>
+                    </Frame.Triggers>
+                    
+                    <Grid>
+                        
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="Auto"/>
+                            <ColumnDefinition Width="*"/>
+                        </Grid.ColumnDefinitions>
+                        
+                        <Image
+                            x:Name="_image"
+                            Source="{Binding Image}"
+                            Grid.Column="0"
+                            Aspect="AspectFit"
+                            BackgroundColor="Transparent"
+                            HeightRequest="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ImageSize.Height'}"
+                            WidthRequest="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ImageSize.Width'}">
+                            <Image.GestureRecognizers>
+                                <TapGestureRecognizer Tapped="DoTap"/>
+                            </Image.GestureRecognizers>
+                        </Image>
+                        
+                        <Label 
+                            x:Name="_label"
+                            Text="{Binding Text}"
+                            Grid.Column="1"
+                            FontSize="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontSize'}" 
+                            FontAttributes="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontAttributes'}"
+                            HorizontalTextAlignment="Center" 
+                            VerticalTextAlignment="Center" 
+                            BackgroundColor="Transparent"
+                            TextColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedForeground'}">
+                            <Label.GestureRecognizers>
+                                <TapGestureRecognizer Tapped="DoTap" />
+                            </Label.GestureRecognizers>
+                            <Label.Triggers>
+                                <DataTrigger TargetType="Label" Binding="{Binding Selected}" Value="True">
+                                    <Setter Property="TextColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedForeground'}" />
+                                </DataTrigger>
+                            </Label.Triggers>
+                        </Label> 
+                        
+                    </Grid>
+                </Frame>
+            </DataTemplate>
+            
+            <DataTemplate x:Key="TextOnlyTemplate" x:DataType="mobile:MobileTabStripItem">
+                <Frame
+                    Grid.Column="{Binding Index}"
+                    HasShadow="False" 
+                    Margin="0" 
+                    Padding="5"
+                    BorderColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    BackgroundColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    CornerRadius="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='CornerRadius'}"
+                    IsClippedToBounds="True"
+                    VerticalOptions="Fill"
+                    HorizontalOptions="Fill">
+                    
+                    <Frame.GestureRecognizers>
+                        <TapGestureRecognizer Tapped="DoTap"/>
+                    </Frame.GestureRecognizers>
+                    
+                    <Frame.Triggers>
+                        <DataTrigger TargetType="Frame" Binding="{Binding Selected}" Value="True">
+                            <Setter Property="BackgroundColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedBackground'}" />
+                        </DataTrigger>
+                    </Frame.Triggers>
+                    
+                    <Label 
+                        x:Name="_label"
+                        Text="{Binding Text}"
+                        FontSize="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontSize'}" 
+                        FontAttributes="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontAttributes'}"
+                        HorizontalTextAlignment="Center" 
+                        VerticalTextAlignment="Center" 
+                        BackgroundColor="Transparent"
+                        TextColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedForeground'}">
+                        <Label.GestureRecognizers>
+                            <TapGestureRecognizer Tapped="DoTap" />
+                        </Label.GestureRecognizers>
+                        <Label.Triggers>
+                            <DataTrigger TargetType="Label" Binding="{Binding Selected}" Value="True">
+                                <Setter Property="TextColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedForeground'}" />
+                            </DataTrigger>
+                        </Label.Triggers>
+                    </Label> 
+
+                </Frame>
+            </DataTemplate>
+            
+            <DataTemplate x:Key="ImageOnlyTemplate" x:DataType="mobile:MobileTabStripItem">
+                <Frame
+                    Grid.Column="{Binding Index}"
+                    HasShadow="False" 
+                    Margin="0" 
+                    Padding="5"
+                    BorderColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    BackgroundColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
+                    CornerRadius="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='CornerRadius'}"
+                    IsClippedToBounds="True"
+                    VerticalOptions="Fill"
+                    HorizontalOptions="Fill">
+                    
+                    <Frame.GestureRecognizers>
+                        <TapGestureRecognizer Tapped="DoTap"/>
+                    </Frame.GestureRecognizers>
+                    
+                    <Frame.Triggers>
+                        <DataTrigger TargetType="Frame" Binding="{Binding Selected}" Value="True">
+                            <Setter Property="BackgroundColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedBackground'}" />
+                        </DataTrigger>
+                    </Frame.Triggers>
+                    
+                    <Image
+                        x:Name="_image"
+                        Source="{Binding Image}"
+                        Aspect="AspectFit"
+                        BackgroundColor="Transparent"
+                        HeightRequest="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ImageSize.Height'}"
+                        WidthRequest="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ImageSize.Width'}">
+                        <Image.GestureRecognizers>
+                            <TapGestureRecognizer Tapped="DoTap"/>
+                        </Image.GestureRecognizers>
+                    </Image>
+                    
+                </Frame>
+            </DataTemplate>
+            
+            <mobile:MobileTabStripDataTemplateSelector 
+                x:Key="MobileTabStripDataTemplateSelector"
+                x:Name="_mobileTabStripDataTemplateSelector"
+                TextOnlyTemplate="{StaticResource TextOnlyTemplate}" 
+                ImageOnlyTemplate="{StaticResource ImageOnlyTemplate}"
+                VerticalTemplate="{StaticResource VerticalTemplate}"
+                HorizontalTemplate="{StaticResource HorizontalTemplate}"/>
+            
+        </ResourceDictionary>
+    </ContentView.Resources>
     <ContentView.Content>
         
         <Frame
@@ -25,62 +255,19 @@
                 </OnPlatform>
             </Frame.Padding>
             
-            <Grid x:Name="_grid" ColumnSpacing="0">
-                
-                <BindableLayout.ItemTemplate>
+            <Grid 
+                x:Name="_grid" 
+                ColumnSpacing="0" 
+                BindableLayout.ItemTemplateSelector="{StaticResource MobileTabStripDataTemplateSelector}">
                 
-                    <DataTemplate x:DataType="mobile:MobileTabStripItem">
-                        <Grid 
-                            Margin="0"
-                            Grid.Column="{Binding Index}"
-                        VerticalOptions="Fill"
-                        HorizontalOptions="Fill">
-                        
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="*"/>
-                        </Grid.ColumnDefinitions>
-                        
-                        <Grid.RowDefinitions>
-                            <RowDefinition Height="*"/>
-                        </Grid.RowDefinitions>
-                            
-                        <Frame
-                            HasShadow="False" 
-                            Margin="0" 
-                            Padding="0"
-                            BorderColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
-                            BackgroundColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}" 
-                            CornerRadius="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='CornerRadius'}"
-                            IsClippedToBounds="True">
-
-                            <Label 
-                                Grid.Row="0" 
-                                x:Name="_label"
-                                Text="{Binding Text}" 
-                                FontSize="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontSize'}" 
-                                FontAttributes="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='FontAttributes'}"
-                                HorizontalTextAlignment="Center" 
-                                VerticalTextAlignment="Center" 
-                                BackgroundColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedBackground'}"
-                                TextColor="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='UnselectedForeground'}"
-                                Margin="0">
-                                <Label.GestureRecognizers>
-                                    <TapGestureRecognizer Tapped="DoTap" />
-                                </Label.GestureRecognizers>
-                                <Label.Triggers>
-                                    <DataTrigger TargetType="Label" Binding="{Binding Selected}" Value="True">
-                                        <Setter Property="TextColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedForeground'}" />
-                                        <Setter Property="BackgroundColor" Value="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='SelectedBackground'}" />
-                                    </DataTrigger>
-                                </Label.Triggers>
-                            </Label> 
-                        </Frame>
-                        
-                    </Grid>
-                        
-                </DataTemplate>
-                    
-            </BindableLayout.ItemTemplate>
+                <!-- <BindableLayout.ItemTemplateSelector> -->
+                <!--     <mobile:MobileTabStripDataTemplateSelector  -->
+                <!--         SelectedLayout="{Binding Source={RelativeSource AncestorType={x:Type mobile:MobileTabStrip}}, Path='ItemsLayout'}" -->
+                <!--         TextOnlyTemplate="{StaticResource TextOnlyTemplate}"  -->
+                <!--         ImageOnlyTemplate="{StaticResource ImageOnlyTemplate}" -->
+                <!--         VerticalTemplate="{StaticResource VerticalTemplate}" -->
+                <!--         HorizontalTemplate="{StaticResource HorizontalTemplate}"/> -->
+                <!-- </BindableLayout.ItemTemplateSelector> -->
                 
             </Grid>
             

+ 60 - 1
InABox.Mobile/InABox.Mobile.Shared/Components/MobileTabStrip/MobileTabStrip.xaml.cs

@@ -8,6 +8,36 @@ using Xamarin.Forms.Xaml;
 
 namespace InABox.Mobile
 {
+
+    public enum MobileTabStripItemLayout
+    {
+        TextOnly,
+        ImageOnly,
+        Vertical,
+        Horizontal
+    }
+
+    public class MobileTabStripDataTemplateSelector : DataTemplateSelector
+    {
+        
+        public MobileTabStripItemLayout SelectedLayout { get; set; }
+        
+        public DataTemplate VerticalTemplate { get; set; }
+        public DataTemplate HorizontalTemplate { get; set; }
+        public DataTemplate TextOnlyTemplate { get; set; }
+        public DataTemplate ImageOnlyTemplate { get; set; }
+
+        protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
+        {
+            return SelectedLayout switch
+            {
+                MobileTabStripItemLayout.ImageOnly => ImageOnlyTemplate,
+                MobileTabStripItemLayout.Vertical => VerticalTemplate,
+                MobileTabStripItemLayout.Horizontal => HorizontalTemplate,
+                _ => TextOnlyTemplate
+            };
+        }
+    }
     
     [XamlCompilation(XamlCompilationOptions.Compile)]
     public partial class MobileTabStrip
@@ -125,6 +155,35 @@ namespace InABox.Mobile
             set => SetValue(FontAttributesProperty, value);
         }
         
+        private readonly BindableProperty ItemsLayoutProperty = BindableProperty.Create(
+            nameof(ItemsLayout),
+            typeof(MobileTabStripItemLayout),
+            typeof(MobileTabStrip),
+            MobileTabStripItemLayout.TextOnly);
+
+        public MobileTabStripItemLayout ItemsLayout
+        {
+            get => (MobileTabStripItemLayout)GetValue(ItemsLayoutProperty);
+            set
+            {
+                _mobileTabStripDataTemplateSelector.SelectedLayout = value;
+                SetValue(ItemsLayoutProperty, value);
+            }
+        }
+        
+        private readonly BindableProperty ImageSizeProperty = BindableProperty.Create(
+            nameof(ImageSize),
+            typeof(Size),
+            typeof(MobileTabStrip),
+            new Size(30,30));
+
+        public Size ImageSize
+        {
+            get => (Size)GetValue(ImageSizeProperty);
+            set => SetValue(ImageSizeProperty, value);
+        }
+
+        
         public MobileTabStripItem SelectedItem 
         {
             get => Items.FirstOrDefault(x => x.Selected);
@@ -171,7 +230,7 @@ namespace InABox.Mobile
             Device.BeginInvokeOnMainThread(() =>
             {
                 foreach (var item in Items)
-                    item.Selected = item == (sender as Label)?.BindingContext;
+                    item.Selected = item == (sender as BindableObject)?.BindingContext;
                 OnPropertyChanged(nameof(Items));
                 SelectionChanged?.Invoke(this,EventArgs.Empty);
             });

+ 11 - 0
InABox.Mobile/InABox.Mobile.Shared/Components/MobileTabStrip/MobileTabStripItem.cs

@@ -18,6 +18,17 @@ namespace InABox.Mobile
             set => SetValue(TextProperty, value);
         }
         
+        private readonly BindableProperty ImageProperty = BindableProperty.Create(
+            nameof(Image),
+            typeof(ImageSource),
+            typeof(MobileTabStripItem));
+
+        public ImageSource Image
+        {
+            get => (ImageSource)GetValue(ImageProperty);
+            set => SetValue(ImageProperty, value);
+        }
+        
         private readonly BindableProperty SelectedProperty = BindableProperty.Create(
             nameof(Selected),
             typeof(bool),

+ 1 - 1
InABox.Mobile/InABox.Mobile.Shared/Components/MobileTimeSelector/MobileTimeButton.xaml

@@ -7,7 +7,7 @@
              x:Class="InABox.Mobile.MobileTimeButton">
 
     <ContentView.Resources>
-        <local:TimeSpanFormatter x:Key="TimeSpanFormatter" x:Name="_timespanFormatter"/>
+        <local:TimeSpanFormatter x:Key="TimeSpanFormatter" x:Name="_timespanFormatter" Prompt="Select Time"/>
     </ContentView.Resources>
     
     <ContentView.ControlTemplate>

+ 5 - 3
InABox.Mobile/InABox.Mobile.Shared/DataModels/CoreRepository.cs

@@ -298,13 +298,14 @@ namespace InABox.Mobile
         
         public Func<TItem, bool> SearchPredicate { get; set; }
 
-        public void Search(Func<TItem, bool> predicate)
+        public ICoreRepository Search(Func<TItem, bool> predicate)
         {
             SearchPredicate = predicate;
             Search();
+            return this;
         }
 
-        public void Search()
+        public ICoreRepository Search()
         {
             var curselected = _selectedItems.ToArray();
             var items = _allitems == null
@@ -321,9 +322,10 @@ namespace InABox.Mobile
             //_items.Clear();
             //_items.ReplaceRange(items);
             OnPropertyChanged(nameof(Items));
+            return this;
         }
  
-        void ICoreRepository.Search(Func<object,bool> method)
+        ICoreRepository ICoreRepository.Search(Func<object,bool> method)
             => Search((o) => method(o as TItem));
 
 

+ 2 - 2
InABox.Mobile/InABox.Mobile.Shared/DataModels/ICoreRepository.cs

@@ -37,8 +37,8 @@ namespace InABox.Mobile
         object AddItem();
         void DeleteItem(object item);
         IEnumerable Items { get; }
-        void Search();
-        void Search(Func<object,bool> predicate);
+        ICoreRepository Search();
+        ICoreRepository Search(Func<object,bool> predicate);
         
         void ToggleSelection(object item);
         void SelectItem(object item);

+ 7 - 5
InABox.Mobile/InABox.Mobile.Shared/InABox.Mobile.Shared.csproj

@@ -22,11 +22,13 @@
         </PackageReference>
         <PackageReference Include="Serilog" Version="3.0.1" />
         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
-        <PackageReference Include="Syncfusion.Licensing" Version="22.1.39" />
-        <PackageReference Include="Syncfusion.Xamarin.Pdf" Version="22.1.39" />
-        <PackageReference Include="Syncfusion.Xamarin.SfDataGrid" Version="22.1.39" />
-        <PackageReference Include="Syncfusion.Xamarin.SfPopupLayout" Version="22.1.39" />
-        <PackageReference Include="Syncfusion.Xamarin.SfPullToRefresh" Version="22.1.39" />
+        <PackageReference Include="Syncfusion.Licensing" Version="23.1.44" />
+        <PackageReference Include="Syncfusion.Xamarin.Pdf" Version="23.1.44" />
+        <PackageReference Include="Syncfusion.Xamarin.SfBusyIndicator" Version="23.1.44" />
+        <PackageReference Include="Syncfusion.Xamarin.SfDataGrid" Version="23.1.44" />
+        <PackageReference Include="Syncfusion.Xamarin.SfPicker" Version="23.1.44" />
+        <PackageReference Include="Syncfusion.Xamarin.SfPopupLayout" Version="23.1.44" />
+        <PackageReference Include="Syncfusion.Xamarin.SfPullToRefresh" Version="23.1.44" />
         <PackageReference Include="Xamarin.Essentials" Version="1.8.0" />
         <PackageReference Include="Xamarin.Forms" Version="5.0.0.2612" />
         <PackageReference Include="XF.Material" Version="1.8.0" />

+ 1 - 1
InABox.Mobile/InABox.Mobile.Shared/MobileUtils.cs

@@ -15,7 +15,7 @@ namespace InABox.Mobile
 
         public static void Init()
         {
-            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(CoreUtils.SyncfusionLicense(SyncfusionVersion.v22_1));
+            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(CoreUtils.SyncfusionLicense(SyncfusionVersion.v23_1));
         }
 
         public static String GetDeviceID()