如何使用 c# 将单个 html 行绑定到 xamarin.forms 中的多个标签

How to bind individual html lines to multiple labels in xamarin.forms with c#

我刚开始使用绑定,所以这可能很简单,但我还没有在网上找到任何合适的答案。我有标签

<Label x:DataType="myNameSpace:MyClass" Text = "{Binding label}"/>
<Label x:DataType="myNameSpace:MyClass" Text = "{Binding label2}"/>

我需要将存储在 dynamic dynamicObject; 中的 json 元素的 html 的不同字符串绑定到不同的标签。所以我不能像 Label Class Doc 建议的那样将整个视图分配给标签。 C# 是

        Label label = new Label();
        label.Text = dynamicObject.mainText;
        label.TextType = TextType.Html;

但是,我需要使用 xaml,它总是说在数据上下文 MyClass 中找不到 label。即使使用 public String label{get{return "Text";}} 也不会显示任何内容。从对象访问不同字符串并将它们显示在不同标签中的最有效方法是什么?

{Binding label} 要求 BindingContext 包含名为 label.

的“public 属性”

你在任何地方设置 BindingContext 吗?在视图构造函数中,do

BindingContext=new MyClass();.

...根据需要进行修改,以使用它应该具有的任何数据初始化 MyClass


那么 MyClass.cs 一定是这样的:

public class MyClass
{
    // These must be PUBLIC PROPERTIES.
    public string label { get; set; }
    public string label2 { get; set; }
}

用法如下:

<Label Text = "{Binding label}"/>
<Label Text = "{Binding label2}"/>

请注意,正如 Jason 所说,没有 x:DataType 属性。这些是针对不同情况的。


一个常见的错误是没有属性。

// This won't work. This is a FIELD, not a property.
public string label;

如果由于引用 DataContext 或 DataType 的错误仍然无法 运行,则:

  • 删除 xaml 文件中的所有 x:DataType 语句。 XAML的前几行大概有一个。 <-- 仅当这会阻止应用程序构建或 运行ning 成功时才删除。如果它不会导致任何致命问题,请将其留在那里。

  • 忽略(忽略)来自 Intellisense 的任何 DataType/DataContext 警告 - 只是 运行 它,看看它是否有效。

如果你让它工作,那么就可以开始重新添加 x:DataType 语句,以消除智能感知警告。但它们不属于单独的标签。我认为这是一个“高级”话题,这里就不多说了。