Dans Xamarin.Forms, je voudrais lier un code derrière une propriété à une étiquette en XAML.
J'ai trouvé de nombreuses réponses et pages Web sur ce sujet, mais elles couvrent toutes des scénarios plus complexes.
Voici ma page XAML:
[XamlCompilation(XamlCompilationOptions.Compile)] public partial class SelViaggioPage : ContentPage { private string _lblText; public string LblText { get { return _lblText; } set { _lblText = value; OnPropertyChanged(); } } public SelViaggioPage() { InitializeComponent(); } protected override void OnAppearing() { this.LblText = "Ciao!!"; base.OnAppearing(); } }
Et voici le code derrière:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TrackValigie" x:Class="TrackValigie.SelViaggioPage"> <ContentPage.Content> <StackLayout> <Label Text="{Binding ?????????}" /> </StackLayout> </ContentPage.Content> </ContentPage>
Je voudrais lier le " LblText "à l'étiquette, en utilisant uniquement XAML , c'est-à-dire sans définir de contexte de liaison ou de liaison dans le code derrière.
Est-ce possible?
3 Réponses :
votre page devra implémenter INotifyPropertyChanged
, mais la syntaxe de liaison doit être simplement
<ContentPage x:Name="MyPage" ... /> ... <Label BindingContext="{x:Reference Name=MyPage}" Text="{Binding LblText}" />
Merci Jason, cela a fonctionné! Je n'avais pas besoin d'implémenter INotifyPropertyChanged
car ContentPage
hérite de BindableObject
, qui l'implémente déjà.
BindingContext = "{x: Reference MyPage}" alternativement
Vous devez définir le x: Name pour ContentPage comme indiqué par la réponse de Jason.
<TextBlock Text="{Binding ElementName=TestControl,Path=StudentName}"/>
Au lieu d'utiliser BindingContext, vous pouvez utiliser ElementName
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TrackValigie" x:Class="TrackValigie.SelViaggioPage" x:Name = "MyControl"/>
La syntaxe XAML Xamarin.Forms est la suivante:
BindingContext = this;
dans le code derrière le fichier. XAML
[XamlCompilation(XamlCompilationOptions.Compile)] public partial class SelViaggioPage : ContentPage { private string _lblText; public string LblText { get { return _lblText; } set { _lblText = value; OnPropertyChanged(); } } public SelViaggioPage() { InitializeComponent(); BindingContext = this; } protected override void OnAppearing() { base.OnAppearing(); this.LblText = "Ciao!!"; } }
Code derrière
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TrackValigie" x:Class="TrackValigie.SelViaggioPage"> <ContentPage.Content> <StackLayout> <Label Text="{Binding LblText}" /> </StackLayout> </ContentPage.Content> </ContentPage>