Xamarin 形成绑定标签

Posted

技术标签:

【中文标题】Xamarin 形成绑定标签【英文标题】:Xamarin forms binding Label 【发布时间】:2016-09-25 10:45:00 【问题描述】:

基本上我想制作功能,当我向我的编辑器输入文本时,它会出现在我的标签中插入的数据。如果我将页面滑动到另一个页面,则该数据应绑定到我输入数据的上一页中的该标签。

所以我有便携式课程。在那个类中,我有方法 public ContentPage CreatePage(MyObject thing) 在这里我定义了许多标签、框、按钮等。但我会指出最重要的事情:在这里我定义我的标签和编辑器:

public partial class CoolPage: CarouselPage
    
    public CoolPage()
        
          foreach (MyObject p in things)
            
                Children.Add(CreatePage(p));
            
        
    public ContentPage CreatePage(MyObject thing) 
        var emptyLabel = new Label
                    
                        Text = "Text",
                        WidthRequest = 50,
                        HeightRequest = 50,
                        BackgroundColor = Color.White
                    ;
                    ((StackLayout)page.Content).Children.Add(emptyLabel);

        var inputNumb = new Editor
                    
                        Text=thing.Number,
                        TextColor = Color.Black,
                        HorizontalOptions = LayoutOptions.Fill,
                        VerticalOptions = LayoutOptions.Fill,
                        IsVisible = true,
                        BackgroundColor = Color.White
                    ;
                    inputNumb.SetBinding(Label.TextProperty, "Text");
                    inputNumb.BindingContext = thing.Number;
                    ((StackLayout)page.Content).Children.Add(inputNumb);
    

我已经尝试过执行这样的事件:

inputNumb.Completed += (sender, args) =>
            
                inputNumb.SetBinding(Label.TextProperty, "Text");
                inputNumb.BindingContext = thing.Number;
            ;

但它不起作用。我认为因为它采用相同的方法。我还尝试通过在CreatePage 方法inputCarNumb.Completed += InputCarNumb_Completed; 上实现这样的一行来超出方法范围,但是当您定义变量 inputNumb 时,它无法识别并且我不知道如何在其他情况下实现。我知道这很简单,但我想我通过 SetBinding / BindingContext 错过了一些东西。

【问题讨论】:

你可以试试emptyLabel.SetBinding(Label.TextProperty, new Binding Path = "inputNumb.Text", Mode = BindingMode.TwoWay, Source = this ); 或者创建一个属性,在该位置完成更改属性值并使用属性名称inputNumb.Text @Vishnu,谢谢你的评论。这种方法:emptyLabel.SetBinding(Label.TextProperty, new Binding Path = "inputNumb.Text", Mode = BindingMode.TwoWay, Source = this ); 不起作用。创造什么样的财产?会是setbinding属性吗? 一个属性,例如。 InputNumbText in CoolPageget, set 然后绑定上面的属性Path = InputNumbText OnCompleted 调用设置属性值并调用OnPropertyChanged(InputNumbText) @Vishnu 我试过了,但它不起作用。也许您可以将代码上传到 pastebin? 【参考方案1】:

我这样解决了这个问题:

emptyLabel.SetBinding(Label.TextProperty, "Text");
emptyLabel.BindingContext = inputNumb;

【讨论】:

@BinaryTale - 请注意,Xamarin 团队建议在 SetBinding 语句之后设置绑定上下文以解决性能问题:developer.xamarin.com/api/property/…【参考方案2】:

确保您的 MyObject 继承并实现 INotifyPropertyChanged,以便在 Number 更改时触发 PropertyChanged。我通常从 XLabs 的 ViewModel 继承,并使用他们的 SetProperty 方法。不要费心在事件中设置绑定。但是 SetBinding 的第二个参数应该是 MyObject 的属性名称“Number”。 BindingContext 也应该 = 东西。

【讨论】:

以上是关于Xamarin 形成绑定标签的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 形成 MVVM Stacklayout 内容绑定

xamarin 形成 xaml OnPlatform 无法处理绑定

Xamarin为标题形成ControlTemplate,为页脚和绑定形成另一个

Xamarin Forms 将属性绑定到标签的文本

Xamarin 中的 FontAwesome 形成 UWP

如何在一个Xamarin表单标签中有2个数据绑定字段?