Xamarin.Forms:创建DataTemplate的实例

时间:2016-12-20 01:52:40

标签: xamarin xamarin.forms

我要创建ContentView BindableProperty类型为DataTemplate的{​​{1}},这样当我使用自定义ContentView时,我可以自定义元素的方式应该看起来像。

但我不想在代码中安排和创建内容,如何从DataTemplate创建实例?

例如,在我的自定义视图中,我有一个对象集合,现在我想为每个对象创建一个基于set数据模板的视图,并将该创建视图的绑定上下文设置为该对象。

1 个答案:

答案 0 :(得分:2)

我按照以下方式解决了这个问题。

我按照以下方式使用自定义ContentView

        <controls:MyCustomView Items="{Binding SampleItems}">
            <controls:MyCustomView.ItemTemplate>
                <DataTemplate>
                    <Label Text="{Binding SampleProperty}" />
                </DataTemplate>
            </controls:MyCustomView.ItemTemplate>
        </controls:MyCustomView>

然后在MyCustomView后面的代码中我声明了一个ItemTemplate可绑定属性:

    public DataTemplate ItemTemplate
    {
        get { return (DataTemplate)GetValue(ItemTemplateProperty); }
        set { SetValue(ItemTemplateProperty, value); }
    }

    public static readonly BindableProperty ItemTemplateProperty = BindableProperty.Create(
        nameof(ItemTemplate),
        typeof(DataTemplate),
        typeof(MyCustomView),
        propertyChanged: (bObj, oldValue, newValue) =>
        {
            var view = bObj as MyCustomView;
            if (view != null)
                view.SampleMethodToArrangeItems();
        }
    );

现在让我们说在我要创建和排列的SampleMethodToArrangeItems方法中,根据提供的数据模板创建项目:

        foreach (var item in Items)
        {
            var itemView = ItemTemplate.CreateContent() as View;
            if (itemView != null)
            {
                itemView.BindingContext = item;
                // Do something with the create view e.g. add it to Grid.Children
            }
        }