mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-14 14:26:28 +01:00
94 lines
No EOL
2.9 KiB
C#
94 lines
No EOL
2.9 KiB
C#
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;
|
|
}
|
|
} |