XAML ListView:标题绑定无法工作

5

我无法让HeaderTemplate中的{Binding Title}出现。

这是与BindingContext相关联的类:

class SensorGroup
{
    public string Title { get; set; }
    public IList<Sensor> Sensors { get; set; }
}

XAML:

<ListView  Header=""
           ItemsSource="{Binding Sensors}">

  <ListView.HeaderTemplate>
    <DataTemplate>
      <Grid>
        <Label Text="{Binding Title}"/>
      </Grid>
    </DataTemplate>
  </ListView.HeaderTemplate>

  <ListView.ItemTemplate>
  ...
</ListView>

如果我将其替换为<Label Text="Some static text"/>,文本会显示出来。
我找到了与此相关的问题(链接在此处),它链接到另一个问题(链接在此处)。但是我无法使其工作。我尝试过:
<ContentPage.Resources>
    <Label x:Key="MyTitle"
            Binding="{Title}"/>
</ContentPage.Resources>

...

<Grid>
    <StaticResource ResourceKey="MyTitle"/>
</Grid>

它给我一个错误,说找不到与Title的绑定。


你是否正确设置了DataContext,以便它可以找到“SensorGroup”类? - ChrisF
ListView 的项绑定到 Sensors 属性,显示正确,因此构造函数中写入的 BindingContext = new SensorGroup()(过于简化)正在正常工作。 - Xavier Peña
1个回答

6
听起来你只需要做以下几点:
<ListView  Header="{Binding .}"
           ItemsSource="{Binding Sensors}">

如果您的ContentPageBindingContext设置为SensorGroup类,则如此设置。以上代码告诉ListView.Header绑定到ContentPage.BindingContext设置的内容。这意味着ListView.HeaderTemplate控件也将使用ContentPage.BindingContext设置的内容。如果您不理解,请告诉我。

就是这样了。非常感谢。回过头来看,它似乎很合理,但我认为如果只靠自己的话,我可能会盯着代码几周,也不会弄清楚... 我当时正在按照Xamarin教程操作,他们告诉我要设置 Header="" 才能让标题正常工作(当然,只适用于静态文本)。所以很愚蠢,我盲目地遵循了这个规则。 - Xavier Peña
@XavierPeña 很高兴能帮忙,我也曾经做了同样的事情,直到最终找到了别人的帖子。没有好的理由就不要为此失去头发 ;) - hvaughan3
谢谢!解决了我的问题 :) 可惜 Xamarin 没有真正记录它! - Rexxo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接