mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2025-04-19 03:27:29 +02:00
Version 3.0.337
This commit is contained in:
parent
fd0e63cf10
commit
573fe77e12
2336 changed files with 33688 additions and 86082 deletions
21
ShareeSharedGuiLib/View/BarLevelInputView.xaml
Normal file
21
ShareeSharedGuiLib/View/BarLevelInputView.xaml
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
x:Class="ShareeSharedGuiLib.View.BarLevelInputView">
|
||||
<ContentView.Content>
|
||||
<StackLayout>
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingDriveBatteryTitel}"/>
|
||||
<sharedGui:BarLevelView
|
||||
x:Name="BarLevelElement"
|
||||
Current="{Binding CurrentText, Mode=TwoWay}"
|
||||
Maximum="{Binding MaximumText}"/>
|
||||
<Stepper
|
||||
x:Name="BarLevelStepper"
|
||||
Value ="{Binding CurrentText, Mode=TwoWay}"
|
||||
Maximum="{Binding MaximumText}"/>
|
||||
</StackLayout>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
110
ShareeSharedGuiLib/View/BarLevelInputView.xaml.cs
Normal file
110
ShareeSharedGuiLib/View/BarLevelInputView.xaml.cs
Normal file
|
@ -0,0 +1,110 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ShareeSharedGuiLib.ViewModel;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class BarLevelInputView : ContentView
|
||||
{
|
||||
private BarLevelInputViewModel _LocalViewModel;
|
||||
|
||||
public BarLevelInputView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
_LocalViewModel = new BarLevelInputViewModel();
|
||||
|
||||
_LocalViewModel.PropertyChanged += (sender, args) =>
|
||||
{
|
||||
// Update Current property from view model on user input.
|
||||
if (args.PropertyName != nameof(BarLevelInputViewModel.Current))
|
||||
return;
|
||||
|
||||
var viewModel = sender as BarLevelInputViewModel;
|
||||
Current = viewModel?.Current != null
|
||||
? viewModel?.Current.Value.ToString()
|
||||
: String.Empty;
|
||||
};
|
||||
|
||||
// Do not bind entire control to local view model. Doing this would break binding of BatteryView control.
|
||||
this.BarLevelElement.BindingContext = _LocalViewModel;
|
||||
this.BarLevelStepper.BindingContext = _LocalViewModel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create bindable property to to allow "Maximum"- proptery to act as a valid target for data binding.
|
||||
/// </summary>
|
||||
public static readonly BindableProperty MaximumProperty = BindableProperty.Create(
|
||||
"Maximum",
|
||||
typeof(string),
|
||||
typeof(BarLevelInputView),
|
||||
"7",
|
||||
propertyChanged: OnMaximumChanged);
|
||||
|
||||
/// <summary>
|
||||
/// Holds the count of bars wich represent charing level full.
|
||||
/// </summary>
|
||||
public string Maximum
|
||||
{
|
||||
get => (string)GetValue(MaximumProperty);
|
||||
set => SetValue(MaximumProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies when value changes. Is required to make binding work.
|
||||
/// </summary>
|
||||
static void OnMaximumChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
if (newValue != oldValue)
|
||||
{
|
||||
var batteryView = bindable as BarLevelInputView;
|
||||
batteryView?.SetMaximum(int.TryParse(newValue.ToString(), out int maximum) ? (int?)maximum : null);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetMaximum(int? maximum) => _LocalViewModel.Maximum = maximum;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Create bindable property to to allow "Current"- proptery to act as a valid target for data binding.
|
||||
/// </summary>
|
||||
public static readonly BindableProperty CurrentProperty = BindableProperty.Create(
|
||||
"Current",
|
||||
typeof(string),
|
||||
typeof(BarLevelInputView),
|
||||
"7",
|
||||
BindingMode.TwoWay,
|
||||
propertyChanged: OnCurrentChanged);
|
||||
|
||||
/// <summary>
|
||||
/// Holds the count of bars wich represent the current charing level.
|
||||
/// </summary>
|
||||
public string Current
|
||||
{
|
||||
get => (string)GetValue(CurrentProperty);
|
||||
set => SetValue(CurrentProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies when value changes. Is required to make binding work.
|
||||
/// </summary>
|
||||
static void OnCurrentChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
if (newValue != oldValue)
|
||||
{
|
||||
var batteryView = bindable as BarLevelInputView;
|
||||
int current;
|
||||
batteryView?.SetCurrent(int.TryParse(newValue.ToString(), out current) ? (int?)current : null);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCurrent(int? current) => _LocalViewModel.Current = current;
|
||||
|
||||
}
|
||||
}
|
20
ShareeSharedGuiLib/View/BarLevelView.xaml
Normal file
20
ShareeSharedGuiLib/View/BarLevelView.xaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="ShareeSharedGuiLib.View.BarLevelView">
|
||||
<ContentView.Content>
|
||||
<StackLayout>
|
||||
<!-- Nice battery images symbolizing filling level for batteries with 5 bars -->
|
||||
<Image
|
||||
x:Name="BarLevelImage"
|
||||
WidthRequest="50"
|
||||
IsVisible="{Binding IsBatteryChargeLevelImageVisible}"
|
||||
Source="{Binding BatteryChargeLevelImageSourceString}"/>
|
||||
<!-- Text describing filling level batteries with 1...4 and 6..N bars -->
|
||||
<Label
|
||||
x:Name="BarLevelLabel"
|
||||
Text="{Binding BatteryChargeLevelBarsText}"
|
||||
IsVisible="{Binding IsBatteryChargeLevelLabelVisible}"/>
|
||||
</StackLayout>
|
||||
</ContentView.Content>
|
||||
</ContentView>
|
94
ShareeSharedGuiLib/View/BarLevelView.xaml.cs
Normal file
94
ShareeSharedGuiLib/View/BarLevelView.xaml.cs
Normal file
|
@ -0,0 +1,94 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ShareeSharedGuiLib.ViewModel;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class BarLevelView : ContentView
|
||||
{
|
||||
private BarLevelViewModel _LocalViewModel = new BarLevelViewModel();
|
||||
|
||||
public BarLevelView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// Do not bind entire control to local view model. Doing this would break binding of BatteryView control.
|
||||
this.BarLevelLabel.BindingContext = _LocalViewModel;
|
||||
this.BarLevelImage.BindingContext = _LocalViewModel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create bindable property to to allow "Maximum"- proptery to act as a valid target for data binding.
|
||||
/// </summary>
|
||||
public static readonly BindableProperty MaximumProperty = BindableProperty.Create(
|
||||
"Maximum",
|
||||
typeof(string),
|
||||
typeof(BarLevelView),
|
||||
"", // Default value must match default value of view model object. Otherwise there might be an update issue.
|
||||
propertyChanged: OnMaximumChanged);
|
||||
|
||||
/// <summary>
|
||||
/// Holds the count of bars wich represent charing level full.
|
||||
/// </summary>
|
||||
public string Maximum
|
||||
{
|
||||
get => (string)GetValue(MaximumProperty);
|
||||
set => SetValue(MaximumProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies when value changes. Is required to make binding work.
|
||||
/// </summary>
|
||||
static void OnMaximumChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
if (newValue != oldValue)
|
||||
{
|
||||
var batteryView = bindable as BarLevelView;
|
||||
batteryView?.SetMaximum(int.TryParse(newValue.ToString(), out int maximum) ? (int?)maximum : null);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetMaximum(int? maximum) => _LocalViewModel.Maximum = maximum;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Create bindable property to to allow "Current"- proptery to act as a valid target for data binding.
|
||||
/// </summary>
|
||||
public static readonly BindableProperty CurrentProperty = BindableProperty.Create(
|
||||
"Current",
|
||||
typeof(string),
|
||||
typeof(BarLevelView),
|
||||
"", // Default value must match default value of view model object. Otherwise there might be an update issue.
|
||||
propertyChanged: OnCurrentChanged);
|
||||
|
||||
/// <summary>
|
||||
/// Holds the count of bars wich represent the current charing level.
|
||||
/// </summary>
|
||||
public string Current
|
||||
{
|
||||
get => (string)GetValue(CurrentProperty);
|
||||
set => SetValue(CurrentProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies when value changes. Is required to make binding work.
|
||||
/// </summary>
|
||||
static void OnCurrentChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
if (newValue != oldValue)
|
||||
{
|
||||
var batteryView = bindable as BarLevelView;
|
||||
int current;
|
||||
batteryView?.SetCurrent(int.TryParse(newValue.ToString(), out current) ? (int?)current : null);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCurrent(int? current) => _LocalViewModel.Current = current;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue