【问题标题】:XAML ListView: header binding not workingXAML ListView:标头绑定不起作用
【发布时间】:2016-10-31 09:42:45
【问题描述】:

我无法让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>

如果我将其替换为 &lt;Label Text="Some static text"/&gt;,则会出现文本。

我找到了this related question,它链接到this other question。但我无法让它工作。我试过了:

<ContentPage.Resources>
    <Label x:Key="MyTitle"
            Binding="{Title}"/>
</ContentPage.Resources>

...

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

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

【问题讨论】:

  • 您是否正确设置了 DataContext 以便它可以找到 SensorGroup 类?
  • ListView 属性绑定到Sensors的项显示正确,所以构造函数中写的BindingContext = new SensorGroup()(过度简化)工作正常。

标签: c# xaml xamarin


【解决方案1】:

你喜欢的声音只需要做:

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

也就是说,如果您的 ContentPageBindingContext 设置为 SensorGroup 类。

以上内容告诉ListView.Header 绑定到ContentPage.BindingContext 设置的任何内容。这意味着ListView.HeaderTemplate 控件也将使用ContentPage.BindingContext 设置的内容。

如果这没有任何意义,请告诉我。

【讨论】:

  • 就是这样。太感谢了。事后看来这似乎是合乎逻辑的,但我想我可能已经盯着代码几个星期了,但我仍然无法自己弄清楚......我正在关注 Xamarin 教程,他们告诉我设置 Header=""使标题工作(当然是静态文本)。太愚蠢了,我盲目地遵循这条规则。
  • @XavierPeña 很高兴能提供帮助,我做了同样的事情,直到我终于找到了其他人的帖子。没有充分的理由脱发是没有意义的;)
  • 谢谢!解决了我的问题 :) 可惜 Xamarin 没有真正记录它!
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 2014-09-09
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多