基本上我想制作功能,当我向我的编辑器输入文本时,它会向我的标签显示插入的数据。如果我将页面刷到另一个页面,那么该数据应该绑定到我输入数据的上一页中的那个标签。
所以我有便携式课程。在那个课程中,我有方法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错过了一些东西。
答案 0 :(得分:2)
我解决了这个问题:
emptyLabel.SetBinding(Label.TextProperty, "Text");
emptyLabel.BindingContext = inputNumb;
答案 1 :(得分:0)
确保MyObject继承并实现INotifyPropertyChanged,以便在Number更改时触发PropertyChanged。我通常继承自XLabs的ViewModel,并使用他们的SetProperty方法。不要在事件中设置绑定。但是SetBinding的第二个参数应该是" Number"这是MyObject的属性名称。另外BindingContext应该= thing。