Xamarin.Forms:绑定到XAML属性背后的代码

Dis*_*sti 3 c# xaml xamarin.forms

在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>
Run Code Online (Sandbox Code Playgroud)

这是背后的代码:

[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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想仅使用XAML将“ LblText”属性绑定到标签,这意味着无需在后面的代码中设置绑定或绑定上下文。

这可能吗?

gor*_*oth 9

或者,如果您不想交换整个控件的绑定上下文,请使用以下命令:

<?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>
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 7

您的页面将需要实现INotifyPropertyChanged,但是绑定语法应该只是

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

... 

<Label BindingContext="{x:Reference Name=MyPage}" Text="{Binding LblText}" />
Run Code Online (Sandbox Code Playgroud)

  • BindingContext="{x:Reference MyPage}" 或者 (3认同)

M. *_*put 6

只需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>
Run Code Online (Sandbox Code Playgroud)

代码隐藏

[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!!";
    }
}
Run Code Online (Sandbox Code Playgroud)