簡體   English   中英

Xamarin.Forms:綁定到 XAML 中的代碼隱藏屬性

[英]Xamarin.Forms: bind to a code behind property in XAML

在 Xamarin.Forms 中,我想將隱藏屬性的代碼綁定到 XAML 中的標簽。

我找到了很多關於這個主題的答案和網頁,但它們都涵蓋了更復雜的場景。

這是我的 XAML 頁面:

<?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>

這是背后的代碼:

[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();
    }
}

我想將“LblText”屬性綁定到標簽,僅使用 XAML ,這意味着無需在后面的代碼中設置綁定或綁定上下文。

這可能嗎?

您的頁面將需要實現INotifyPropertyChanged ,但綁定語法應該只是

<ContentPage x:Name="MyPage" ... />

... 

<Label BindingContext="{x:Reference Name=MyPage}" Text="{Binding LblText}" />

您需要按照 Jason's Answer 所述為 ContentPage 設置 x:Name 。

<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"/>

您可以使用 ElementName 而不是使用 BindingContext

 <TextBlock Text="{Binding ElementName=TestControl,Path=StudentName}"/>

只需添加BindingContext = this; 在代碼隱藏文件中。

XAML

<?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>

背后的代碼

[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!!";
    }
}

或者,如果您不想為整個控件交換綁定上下文,請使用以下命令:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Name="this"
             x:Class="SomePage">
    <ContentPage.Content>
            <StackLayout>
                <Label Text="{Binding SomeProp, Source={x:Reference this}}" />
            </StackLayout>
    </ContentPage.Content>
</ContentPage>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM