Witam. Jestem początkujący zarówno w c# jak i w xamarin. W ramach nauki przerabiam sobie pewien kurs i natrafiłem na użycie "Application Properties". O ile działanie rozumiem to zastanowiła mnie obsługa tego przy wykorzystaniu właściwości klasy wraz seterem i geterem.
Więc na początek kod w głównej klasie aplikacji:
(pominięta ta część kodu co nie istotna dla pytania)
public partial class App : Application
{
private const string TitleKey = "Name";
private const string NotificationEnabled = "NotificationEnabled";
public App()
{
InitializeComponent();
MainPage = new AppProperties();
}
public string Title
{
get
{
if (Properties.ContainsKey(TitleKey))
return Properties[TitleKey].ToString();
return "";
}
set
{
Properties[TitleKey] = value;
}
}
public bool NotificationsEnabled
{
get
{
if (Properties.ContainsKey(NotificationEnabled))
return (bool)Properties[NotificationEnabled];
return false;
}
set
{
Properties[NotificationEnabled] = value;
}
}
}
Code-behind klasy "AppProperties":
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class AppProperties : ContentPage
{
public AppProperties()
{
InitializeComponent();
BindingContext = Application.Current;
}
}
I kod XAML:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="link"
xmlns:x="link"
x:Class="X_kurs.AppProperties">
<TableView Intent="Form">
<TableRoot>
<TableSection>
<EntryCell Text="{Binding Title}" Label="Title" Placeholder="Add Title"/>
<SwitchCell Text="Notification" On="{Binding NotificationsEnabled}"/>
</TableSection>
</TableRoot>
</TableView>
</ContentPage>
I kod działa tak jak trzeba.
A moje pytanie jest odnośnie setterów dla właściwości w głównej klasie, czyli "NotificationsEnabled" i "Title".
Kiedy jest wywoływany ten setter? O ile z getterem sprawa wydaje mi się prosta (wywoływany jest w momencie gdy parser w xaml natrafia na odpowiednią bindowaną właściwość) to jak to się ma z setterem? Czy "value" zmienia swoją wartość za każdym razem gdy zmienia się wartość Bindowana w xaml? Czy wartość value jest pobierana dopiero w momencie zapisu do "Application Properties".
Tak jak pisałem jestem nowy w c# a wcześniej pisałem w JS i PHP i tam setterów i getterów bezpośrednio we właściwościach klasy nie było. Dlatego pytam się jak to tu działa.
Z góry dziękuję za odpowiedź.
Pozdrawiam.