绑定ScrollView内容

时间:2018-09-03 11:33:50

标签: c# xamarin xamarin.forms

我想从ViewModel类动态绑定ScrollView内容。

我有xaml代码:

Nth

和ViewModel代码

<ScrollView
   Grid.Column="1"
   Content="{Binding UserGrid}"
   HorizontalScrollBarVisibility="Never"
   IsEnabled="False"
   Orientation="Horizontal">
</ScrollView>

当然,我已经在View类中初始化了绑定上下文

我的问题是,是否可以使用此内容绑定来动态绑定此内容。 目前,我收到一个错误:

,找不到“内容”的属性,可绑定属性或事件,或者值和属性之间的类型不匹配”

如果不是动态视图绑定的正确方法,那是什么?

1 个答案:

答案 0 :(得分:0)

数据绑定的整体思想是将UI与数据分开。因此,数据模型不应包含任何UI元素。

您可以做什么:

  1. 创建一个新的模型类,其中包含要在该滚动视图中显示的所有数据,为进一步参考,我将其称为“ CardViewModel”。
  2. 将List CardViewData的属性添加到ViewModel
  3. 从ViewModel中删除InitAsync任务
  4. 确保两个视图模型都实现INotifyPropertyChanged接口

现在在使用ViewModel的视图中,重载构造函数以将您的视图模型作为参数。 在构造函数中,您遍历CardViewModel列表中的项目,并为每个项目创建一个Grid。

public TimeTableView(ViewModel model)
{
    foreach (CardViewModel cardModel in CardViewData)
    {
        CardView view = new CardView(cardModel);
        Container.Children.Add(view);
    }
}

请注意,“容器”是包含cardviews的元素的占位符。

实际上,我建议您实现一个自定义视图,其中包含所有Elements,以便显示CardViewModel的数据,因此您可以将自定义视图的绑定上下文设置为cardview模型:

public class CardView : Grid
{
    public CardView(CardViewModel model)
    {
        BindingContext = model;
    }
}

此外,ScrollView只能包含一个元素,因此不能简单地将一堆元素放入其中。 您可能需要在其中放置一个网格,然后将CardViews添加到该网格中。