首页 > 解决方案 > 如何将值绑定到引用的自定义内容页面 (XAML)

问题描述

我创建了一个自定义 ContentPage 来显示一个带有首字母的圆形头像。当我通过绑定传递一个值时,它会显示为null,我进行了调试以检查这一点。有人能帮助我吗?谢谢。

主页.xaml

<views:CircleView CircleText="{Binding Initials}"/>

CircleView.xaml

<Frame x:Name="circleFrame">
    <Label  x:Name="circleLabel"
            Text="{Binding CircleText}"/>
</Frame>

CircleView.xaml.cs

public partial class CircleView : ContentView
{
    public CircleView()
    {
        InitializeComponent();
        BindingContext = this;
    }

    public static readonly BindableProperty CircleTextProperty =
BindableProperty.Create(nameof(CircleText), typeof(string), typeof(CircleView), null);

    public string CircleText
    {
        get { return (string)GetValue(CircleTextProperty); }
        set { SetValue(CircleTextProperty, value); }
    }
}

标签: xamlxamarinxamarin.formsxamarin-bindingxaml-binding

解决方案


你可以试试下面的代码。

CircleView.xaml:</p>

   <Frame x:Name="circleFrame">
        <Label  x:Name="circleLabel"/>
    </Frame>

CircleView.xaml.cs:

    public CircleView()
    {
        InitializeComponent();

    }

    public static readonly BindableProperty CircleTextProperty =
    BindableProperty.Create(nameof(CircleText), typeof(string), typeof(CircleView), propertyChanged:(b,o,n)=>(b as CircleView).OnChanged());

    private void OnChanged()
    {
        circleLabel.Text = CircleText;
    }

    public string CircleText
    {
        get { return (string)GetValue(CircleTextProperty); }
        set { SetValue(CircleTextProperty, value); }
    }

MainPage.xaml:

     <views:CircleView CircleText="{Binding Initials}"/>

MainPage.xaml.cs:

    public string Initials { get; set; }
    public MainPage()
    {
        InitializeComponent();
        Initials = "Hello";
        this.BindingContext = this;
    }

推荐阅读