【发布时间】:2019-08-26 06:50:35
【问题描述】:
CollectionView(或 ListView)提供了一种查看对象序列(T 类型)的方法。与 StackLayout 或 Grid 相比,它的优势在于仅根据需要加载视图。
为每个对象指定视图的自然方法是提供一个函数v:T->View (F#)。
但是 CollectionView/ListView 需要 DataTemplate。 DataTemplate class 与绑定非常相关,因此 API 是不自然的、无信息的和类型不安全的。有用的属性似乎是Values,类型为IDictionary<BindableProperty,Object>。
是否有可能绕过这个 API 并创建一个接受 v:T->View 并返回 DataTemplate 的函数?这将允许为 DataTemplate 以及 ListView 和 CollectionView 创建一个干净的 API。
【问题讨论】:
-
一种方法是: 1. 创建一个
type BindContainer<T>(t:T) = member this.Contents = t,其中内容被更改为可绑定友好的东西。 2. 不是传入T的列表作为项目,而是传入BindContainer<T>的列表,将此列表转换为ObservableCollection(可绑定友好)。 3. 使用创建ContentView的“函数”定义DataTemplate,使用.SetBinding(ContentView.ContentProperty,"Contents")在其上设置绑定,然后返回它。如果以前在代码中使用过绑定的人可以充实/简化这个想法,那就太好了。
标签: xamarin.forms f#