我们如何将数据绑定到Xamarin表单中footer
内的ListView
上,这里我需要将count_in
值传递给页脚。
<ListView x:Name="listView">
<ListView.Footer>
<StackLayout>
<Label Text="{Binding Count}" BackgroundColor="Gray"></Label>
</StackLayout>
</ListView.Footer>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding image}" WidthRequest="50" HeightRequest="50" Grid.Column="0" VerticalOptions="Center"/>
<StackLayout Grid.Column="1">
<Label Text="{Binding FullName}" TextColor="#f35e20" HorizontalTextAlignment="Center"/>
</StackLayout>
<StackLayout Grid.Column="2">
<Label Text="{Binding SoccerStatus}" HorizontalTextAlignment="Center" TextColor="#503026"/>
</StackLayout>
<StackLayout Grid.Column="3">
<Label Text="{Binding CurrentDate}" HorizontalTextAlignment="Center" TextColor="#503026"/>
</StackLayout>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
下面是DisplayCount()从数据库中获取计数;
public void DisplayCount()
{
var datetoday = DateTime.Now.ToString("ddMMyyyy");
var count_in = (from x in conn.Table<SoccerAvailability>().Where(x => string.Equals(x.SoccerStatus, "IN", StringComparison.OrdinalIgnoreCase) && x.CurrentDate == datetoday) select x).Count();
}
答案 0 :(得分:2)
您绑定到Count
<Label Text="{Binding Count}" BackgroundColor="Gray"></Label>
因此Count必须是ViewModel上的公共属性
public int Count { get; set; }
答案 1 :(得分:1)
现在获取数据库异常SQLite异常没有这样的功能 等于
这是因为SQLLite linq无法识别string.Equals
方法。您可以使用ToListAsync
将其转换为列表,以用于一种情况。然后使用equals过滤c#列表对象:
var datetoday = DateTime.Now.ToString("ddMMyyyy");
var items = await conn.Table<SoccerAvailability>().Where(x => x.CurrentDate == datetoday).ToListAsync();
var finalsItems = items.Where(x => string.Equals(x.SoccerStatus, "IN", StringComparison.OrdinalIgnoreCase)).ToList();
Count = finalsItems.Count();
最后,将标签的文本绑定到此Count属性。
编辑有关绑定的信息:
您是否已将内容页面设置为ViewModel?此外,在您的视图模型中实现INotifyPropertyChanged
接口:
// Set your page's binding context
BindingContext = new PageViewModel();
public class PageViewModel : INotifyPropertyChanged
{
int count;
public int Count
{
set
{
if (count != value)
{
count = value;
onPropertyChanged();
}
}
get
{
return count;
}
}
public event PropertyChangedEventHandler PropertyChanged;
void onPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
编辑2:
如果您不使用视图模型,请在页脚标签上设置一个名称:
<ListView.Footer>
<StackLayout>
<Label x:Name="FooterLabel" BackgroundColor="Gray"></Label>
</StackLayout>
</ListView.Footer>
然后直接设置其值:
//...
FooterLabel.Text = finalsItems.Count().ToString();
答案 2 :(得分:0)
您需要为页脚指定绑定上下文。
默认情况下,列表视图中的页脚,页眉和模板,其绑定上下文将是当前显示的项目。因此,在这种情况下,Count
必须是ItemsSource
上项目的公共财产。将Count
绑定指向您的视图模型。
<Label Text="{Binding BindingContext.Count, Source={x:Reference xNameSetForCurrentPage}" BackgroundColor="Gray"></Label>
xNameSetForCurrentPage
是在页面的最顶部元素(所有xmlns内容所在的位置)设置的x:Name="name"
。