format BindableProperty & fix a tiny issue about rank page refreshing
This commit is contained in:
		@@ -34,8 +34,8 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class LongPressGrid : Grid
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty LongCommandProperty = BindableProperty.Create(nameof(LongCommand), typeof(Command), typeof(LongPressGrid));
 | 
			
		||||
        public static readonly BindableProperty LongCommandParameterProperty = BindableProperty.Create(nameof(LongCommandParameter), typeof(object), typeof(LongPressGrid));
 | 
			
		||||
        public static readonly BindableProperty LongCommandProperty = Helper.Create<Command, LongPressGrid>(nameof(LongCommand));
 | 
			
		||||
        public static readonly BindableProperty LongCommandParameterProperty = Helper.Create<object, LongPressGrid>(nameof(LongCommandParameter));
 | 
			
		||||
 | 
			
		||||
        public Command LongCommand
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,12 @@ namespace Billing.UI
 | 
			
		||||
{
 | 
			
		||||
    public class GroupStackLayout : Layout<View>
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty GroupHeaderTemplateProperty = BindableProperty.Create(nameof(GroupHeaderTemplate), typeof(DataTemplate), typeof(GroupStackLayout));
 | 
			
		||||
        public static readonly BindableProperty ItemTemplateProperty = BindableProperty.Create(nameof(ItemTemplate), typeof(DataTemplate), typeof(GroupStackLayout));
 | 
			
		||||
        public static readonly BindableProperty ItemsSourceProperty = BindableProperty.Create(nameof(ItemsSource), typeof(IList), typeof(GroupStackLayout), propertyChanged: OnItemsSourcePropertyChanged);
 | 
			
		||||
        public static readonly BindableProperty SpacingProperty = BindableProperty.Create(nameof(Spacing), typeof(double), typeof(GroupStackLayout), defaultValue: 4d);
 | 
			
		||||
        public static readonly BindableProperty RowHeightProperty = BindableProperty.Create(nameof(RowHeight), typeof(double), typeof(GroupStackLayout), defaultValue: 32d);
 | 
			
		||||
        public static readonly BindableProperty GroupHeightProperty = BindableProperty.Create(nameof(GroupHeight), typeof(double), typeof(GroupStackLayout), defaultValue: 24d);
 | 
			
		||||
        public static readonly BindableProperty GroupHeaderTemplateProperty = Helper.Create<DataTemplate, GroupStackLayout>(nameof(GroupHeaderTemplate));
 | 
			
		||||
        public static readonly BindableProperty ItemTemplateProperty = Helper.Create<DataTemplate, GroupStackLayout>(nameof(ItemTemplate));
 | 
			
		||||
        public static readonly BindableProperty ItemsSourceProperty = Helper.Create<IList, GroupStackLayout>(nameof(ItemsSource), propertyChanged: OnItemsSourcePropertyChanged);
 | 
			
		||||
        public static readonly BindableProperty SpacingProperty = Helper.Create<double, GroupStackLayout>(nameof(Spacing), defaultValue: 4d);
 | 
			
		||||
        public static readonly BindableProperty RowHeightProperty = Helper.Create<double, GroupStackLayout>(nameof(RowHeight), defaultValue: 32d);
 | 
			
		||||
        public static readonly BindableProperty GroupHeightProperty = Helper.Create<double, GroupStackLayout>(nameof(GroupHeight), defaultValue: 24d);
 | 
			
		||||
 | 
			
		||||
        public DataTemplate GroupHeaderTemplate
 | 
			
		||||
        {
 | 
			
		||||
@@ -43,17 +43,16 @@ namespace Billing.UI
 | 
			
		||||
            set => SetValue(GroupHeightProperty, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static void OnItemsSourcePropertyChanged(BindableObject obj, object old, object @new)
 | 
			
		||||
        private static void OnItemsSourcePropertyChanged(GroupStackLayout stack, IList old, IList list)
 | 
			
		||||
        {
 | 
			
		||||
            var stack = (GroupStackLayout)obj;
 | 
			
		||||
            stack.lastWidth = -1;
 | 
			
		||||
            if (@new == null)
 | 
			
		||||
            if (list == null)
 | 
			
		||||
            {
 | 
			
		||||
                //stack.cachedLayout.Clear();
 | 
			
		||||
                stack.Children.Clear();
 | 
			
		||||
                stack.InvalidateLayout();
 | 
			
		||||
            }
 | 
			
		||||
            else if (@new is IList list)
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                stack.freezed = true;
 | 
			
		||||
                //stack.cachedLayout.Clear();
 | 
			
		||||
 
 | 
			
		||||
@@ -4,16 +4,32 @@ using Xamarin.Forms;
 | 
			
		||||
 | 
			
		||||
namespace Billing.UI
 | 
			
		||||
{
 | 
			
		||||
    public enum BorderStyle
 | 
			
		||||
    {
 | 
			
		||||
        None = 0,
 | 
			
		||||
        RoundedRect
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class OptionEntry : Entry { }
 | 
			
		||||
    public class OptionEditor : Editor { }
 | 
			
		||||
    public class OptionPicker : Picker
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty BorderStyleProperty = Helper.Create<BorderStyle, OptionPicker>(nameof(BorderStyle));
 | 
			
		||||
 | 
			
		||||
        public BorderStyle BorderStyle
 | 
			
		||||
        {
 | 
			
		||||
            get => (BorderStyle)GetValue(BorderStyleProperty);
 | 
			
		||||
            set => SetValue(BorderStyleProperty, value);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public class OptionDatePicker : DatePicker { }
 | 
			
		||||
    public class OptionTimePicker : TimePicker { }
 | 
			
		||||
 | 
			
		||||
    public abstract class OptionCell : ViewCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(OptionCell));
 | 
			
		||||
        public static readonly BindableProperty BackgroundColorProperty = BindableProperty.Create(nameof(BackgroundColor), typeof(Color), typeof(OptionCell));
 | 
			
		||||
        public static readonly BindableProperty IconProperty = BindableProperty.Create(nameof(Icon), typeof(ImageSource), typeof(OptionCell));
 | 
			
		||||
        public static readonly BindableProperty TitleProperty = Helper.Create<string, OptionCell>(nameof(Title));
 | 
			
		||||
        public static readonly BindableProperty BackgroundColorProperty = Helper.Create<Color, OptionCell>(nameof(BackgroundColor));
 | 
			
		||||
        public static readonly BindableProperty IconProperty = Helper.Create<ImageSource, OptionCell>(nameof(Icon));
 | 
			
		||||
 | 
			
		||||
        public string Title
 | 
			
		||||
        {
 | 
			
		||||
@@ -124,7 +140,7 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionTextCell : OptionCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty DetailProperty = BindableProperty.Create(nameof(Detail), typeof(string), typeof(OptionTextCell));
 | 
			
		||||
        public static readonly BindableProperty DetailProperty = Helper.Create<string, OptionTextCell>(nameof(Detail));
 | 
			
		||||
 | 
			
		||||
        public string Detail
 | 
			
		||||
        {
 | 
			
		||||
@@ -143,8 +159,8 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionSelectCell : OptionTextCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty CommandProperty = BindableProperty.Create(nameof(Command), typeof(Command), typeof(OptionSelectCell));
 | 
			
		||||
        public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create(nameof(CommandParameter), typeof(object), typeof(OptionSelectCell));
 | 
			
		||||
        public static readonly BindableProperty CommandProperty = Helper.Create<Command, OptionSelectCell>(nameof(Command));
 | 
			
		||||
        public static readonly BindableProperty CommandParameterProperty = Helper.Create<object, OptionSelectCell>(nameof(CommandParameter));
 | 
			
		||||
 | 
			
		||||
        public Command Command
 | 
			
		||||
        {
 | 
			
		||||
@@ -189,8 +205,8 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionImageCell : OptionSelectCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty ImageSourceProperty = BindableProperty.Create(nameof(ImageSource), typeof(ImageSource), typeof(OptionImageCell));
 | 
			
		||||
        public static readonly BindableProperty TintColorProperty = BindableProperty.Create(nameof(TintColor), typeof(Color?), typeof(OptionImageCell));
 | 
			
		||||
        public static readonly BindableProperty ImageSourceProperty = Helper.Create<ImageSource, OptionImageCell>(nameof(ImageSource));
 | 
			
		||||
        public static readonly BindableProperty TintColorProperty = Helper.Create<Color?, OptionImageCell>(nameof(TintColor));
 | 
			
		||||
 | 
			
		||||
        [TypeConverter(typeof(ImageSourceConverter))]
 | 
			
		||||
        public ImageSource ImageSource
 | 
			
		||||
@@ -240,7 +256,7 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionSwitchCell : OptionCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty IsToggledProperty = BindableProperty.Create(nameof(IsToggled), typeof(bool), typeof(OptionSwitchCell));
 | 
			
		||||
        public static readonly BindableProperty IsToggledProperty = Helper.Create<bool, OptionSwitchCell>(nameof(IsToggled));
 | 
			
		||||
 | 
			
		||||
        public bool IsToggled
 | 
			
		||||
        {
 | 
			
		||||
@@ -258,7 +274,7 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionDatePickerCell : OptionCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty DateProperty = BindableProperty.Create(nameof(Date), typeof(DateTime), typeof(OptionDatePickerCell));
 | 
			
		||||
        public static readonly BindableProperty DateProperty = Helper.Create<DateTime, OptionDatePickerCell>(nameof(Date));
 | 
			
		||||
 | 
			
		||||
        public DateTime Date
 | 
			
		||||
        {
 | 
			
		||||
@@ -278,7 +294,7 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionTimePickerCell : OptionCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty TimeProperty = BindableProperty.Create(nameof(Time), typeof(TimeSpan), typeof(OptionTimePickerCell));
 | 
			
		||||
        public static readonly BindableProperty TimeProperty = Helper.Create<TimeSpan, OptionTimePickerCell>(nameof(Time));
 | 
			
		||||
 | 
			
		||||
        public TimeSpan Time
 | 
			
		||||
        {
 | 
			
		||||
@@ -298,9 +314,9 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionEntryCell : OptionCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(OptionEntryCell));
 | 
			
		||||
        public static readonly BindableProperty KeyboardProperty = BindableProperty.Create(nameof(Keyboard), typeof(Keyboard), typeof(OptionEntryCell));
 | 
			
		||||
        public static readonly BindableProperty PlaceholderProperty = BindableProperty.Create(nameof(Placeholder), typeof(string), typeof(OptionEntryCell));
 | 
			
		||||
        public static readonly BindableProperty TextProperty = Helper.Create<string, OptionEntryCell>(nameof(Text));
 | 
			
		||||
        public static readonly BindableProperty KeyboardProperty = Helper.Create<Keyboard, OptionEntryCell>(nameof(Keyboard), defaultValue: Keyboard.Default);
 | 
			
		||||
        public static readonly BindableProperty PlaceholderProperty = Helper.Create<string, OptionEntryCell>(nameof(Placeholder));
 | 
			
		||||
 | 
			
		||||
        public string Text
 | 
			
		||||
        {
 | 
			
		||||
@@ -351,10 +367,10 @@ namespace Billing.UI
 | 
			
		||||
 | 
			
		||||
    public class OptionEditorCell : OptionVerticalCell
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(OptionEditorCell));
 | 
			
		||||
        public static readonly BindableProperty FontSizeProperty = BindableProperty.Create(nameof(FontSize), typeof(double), typeof(OptionEditorCell), defaultValue: Device.GetNamedSize(NamedSize.Default, typeof(Editor)));
 | 
			
		||||
        public static readonly BindableProperty KeyboardProperty = BindableProperty.Create(nameof(Keyboard), typeof(Keyboard), typeof(OptionEditorCell), defaultValue: Keyboard.Default);
 | 
			
		||||
        public static readonly BindableProperty PlaceholderProperty = BindableProperty.Create(nameof(Placeholder), typeof(string), typeof(OptionEditorCell));
 | 
			
		||||
        public static readonly BindableProperty TextProperty = Helper.Create<string, OptionEditorCell>(nameof(Text));
 | 
			
		||||
        public static readonly BindableProperty FontSizeProperty = Helper.Create<double, OptionEditorCell>(nameof(FontSize), defaultValue: Device.GetNamedSize(NamedSize.Default, typeof(Editor)));
 | 
			
		||||
        public static readonly BindableProperty KeyboardProperty = Helper.Create<Keyboard, OptionEditorCell>(nameof(Keyboard), defaultValue: Keyboard.Default);
 | 
			
		||||
        public static readonly BindableProperty PlaceholderProperty = Helper.Create<string, OptionEditorCell>(nameof(Placeholder));
 | 
			
		||||
 | 
			
		||||
        public string Text
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,24 +7,23 @@ namespace Billing.UI
 | 
			
		||||
{
 | 
			
		||||
    public class WrapLayout : Layout<View>
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly BindableProperty ItemsSourceProperty = BindableProperty.Create(nameof(ItemsSource), typeof(IList), typeof(WrapLayout), propertyChanged: OnItemsSourcePropertyChanged);
 | 
			
		||||
        public static readonly BindableProperty ColumnSpacingProperty = BindableProperty.Create(nameof(ColumnSpacing), typeof(double), typeof(WrapLayout), defaultValue: 4d, propertyChanged: (obj, _, _) => ((WrapLayout)obj).InvalidateLayout());
 | 
			
		||||
        public static readonly BindableProperty RowSpacingProperty = BindableProperty.Create(nameof(RowSpacing), typeof(double), typeof(WrapLayout), defaultValue: 4d, propertyChanged: (obj, _, _) => ((WrapLayout)obj).InvalidateLayout());
 | 
			
		||||
        public static readonly BindableProperty ItemsSourceProperty = Helper.Create<IList, WrapLayout>(nameof(ItemsSource), propertyChanged: OnItemsSourcePropertyChanged);
 | 
			
		||||
        public static readonly BindableProperty ColumnSpacingProperty = Helper.Create<double, WrapLayout>(nameof(ColumnSpacing), defaultValue: 4d, propertyChanged: (layout, _, _) => layout.InvalidateLayout());
 | 
			
		||||
        public static readonly BindableProperty RowSpacingProperty = Helper.Create<double, WrapLayout>(nameof(RowSpacing), defaultValue: 4d, propertyChanged: (layout, _, _) => layout.InvalidateLayout());
 | 
			
		||||
 | 
			
		||||
        private static void OnItemsSourcePropertyChanged(BindableObject obj, object old, object @new)
 | 
			
		||||
        private static void OnItemsSourcePropertyChanged(WrapLayout layout, IList old, IList list)
 | 
			
		||||
        {
 | 
			
		||||
            var itemTemplate = BindableLayout.GetItemTemplate(obj);
 | 
			
		||||
            var itemTemplate = BindableLayout.GetItemTemplate(layout);
 | 
			
		||||
            if (itemTemplate == null)
 | 
			
		||||
            {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            var layout = (WrapLayout)obj;
 | 
			
		||||
            if (@new == null)
 | 
			
		||||
            if (list == null)
 | 
			
		||||
            {
 | 
			
		||||
                layout.Children.Clear();
 | 
			
		||||
                layout.InvalidateLayout();
 | 
			
		||||
            }
 | 
			
		||||
            else if (@new is IList list)
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                layout.freezed = true;
 | 
			
		||||
                layout.Children.Clear();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user