我要创建ContentView
BindableProperty
类型为DataTemplate
的{{1}},这样当我使用自定义ContentView
时,我可以自定义元素的方式应该看起来像。
但我不想在代码中安排和创建内容,如何从DataTemplate创建实例?
例如,在我的自定义视图中,我有一个对象集合,现在我想为每个对象创建一个基于set数据模板的视图,并将该创建视图的绑定上下文设置为该对象。
答案 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
}
}