在运行时将带有绑定的控件添加到 Xamarin ListView?

Adding controls with bindings to an Xamarin ListView at runtime?

我正在尝试在运行时添加一个绑定到 ListView 的标签(用于 Whosebug 目的的基本示例,这不是我可以添加到 XAML ItemTemplate 的内容)。

我 运行 遇到的问题是,如果我这样添加带有绑定的标签:

private void Cell_OnAppearing(object sender, EventArgs e)
{
     View view = ((ViewCell) sender).View;
     StackLayout myStackLayout= (StackLayout)view.FindByName("myStackLayout");
     Label lblTest = new Label()
     {
          HorizontalOptions = LayoutOptions.StartAndExpand,
          VerticalOptions = LayoutOptions.Center,
          Text = "{Binding TestLabelText}"
     };
     myStackLayout.Children.Add(lblTest);
}

标签只显示文本“{Binding TestLabelText}”而不是显示绑定结果。

有没有办法让它工作或访问此 ListView 单元格的绑定数据并以此方式设置标签文本?

您需要使用 SetBinding 并可能设置 context

  • The BindingContext property specifies the source object.
  • The SetBinding method specifies the target property and source property.

例子

label.SetBinding(Label.TextProperty, "TestLabelText");

另一种选择是 xaml 设计时的标签(可以预编译),并在需要时更改其可见性。

注意 : 更改列表项的可视化树时需要小心,有很多缓存和优化完成,更改其大小可能会给您带来问题