Ios 绑定表源要从哪个类继承
我使用的是Xamarin和mvvmcross,以及最终绑定到可观察集合的表的视图 这对于如何创建自定义单元格非常有用,但似乎已经过时了。大约42分钟后,Stuart为他的表创建了一个数据源,该数据源来自Ios 绑定表源要从哪个类继承,ios,xamarin,mvvmcross,Ios,Xamarin,Mvvmcross,我使用的是Xamarin和mvvmcross,以及最终绑定到可观察集合的表的视图 这对于如何创建自定义单元格非常有用,但似乎已经过时了。大约42分钟后,Stuart为他的表创建了一个数据源,该数据源来自MVXSimpleBindableTableTableSource,但该类似乎不存在,或者至少我找不到它。那么,使用mvvmcross绑定到UITableView的“最佳”方式是什么 此外,我在常规MvxViewController中使用UITableView,因为我似乎无法让MvxTableVi
MVXSimpleBindableTableTableSource
,但该类似乎不存在,或者至少我找不到它。那么,使用mvvmcross绑定到UITableView的“最佳”方式是什么
此外,我在常规MvxViewController中使用UITableView,因为我似乎无法让MvxTableViewController与xib一起工作,这似乎表明目前不可能实现。可用的v3表源有: 抽象类
-
- 仅基本功能
- 无
-通常不直接使用ItemsSource
-
- 从基表继承并添加数据绑定的
ItemsSource
- 继承类只需实现受保护的抽象UITableViewCell GetOrCreateCellFor(UITableView tableView、NSIndexPath indexPath、对象项)代码>
- 从基表继承并添加数据绑定的
-
- 继承自
MvxTableViewSource
- 通过
UITableViewCellStyle
- 在这些文件中,您可以绑定
、TitleText
、DetailText
和(带有一些调侃的)附件ImageUrl
- 继承自
-
- 继承自
MvxTableViewSource
- 为集合中的所有项目提供单个单元格类型-通过
ctor中的
string nibName
- 在这些单元格中,您可以绑定自己喜欢的内容-请参阅视频(稍后)
- 继承自
- -提供一些
样式挂钩,允许您实现Func
,而无需从GetOrCreateCellFor
MvxTableViewSource
我通常使用:
- 在演示中:
- 一个
-因为我得到一个列表而不必创建自定义单元格MvxStandardTableViewSource
- 一个
- 实数编码:
- a
当我只需要一种单元格类型时MvxSimpleTableViewSource
- 当我需要多个单元格类型时,从
继承的自定义类-例如,请参见下文MvxTableViewSource
- a
具有多种单元格类型的常规表源通常如下所示:
公共类多态ClisitItemTypesView
:MvxTableViewController
{
公共多态性ClisitItemTypesView()
{
Title=“多边形列表”;
}
公共覆盖无效ViewDidLoad()
{
base.ViewDidLoad();
变量源=新表源(TableView);
此.AddBindings(新字典
{
{来源,“ItemsSource动物”}
});
TableView.Source=Source;
TableView.ReloadData();
}
公共类表源:MvxTableViewSource
{
私有静态只读NSString KITTENCELLIDENIER=新NSString(“KittenCell”);
私有静态只读NSString DogCellIdentifier=新NSString(“DogCell”);
公共表源(UITableView表视图)
:基础(表格视图)
{
tableView.RegisternbforcellReuse(UINib.FromName(“KittenCell”,NSBundle.MainBundle),
Kittencellier);
tableView.RegisternbforcellReuse(UINib.FromName(“DogCell”,NSBundle.MainBundle),DogCellIdentifier);
}
公共覆盖浮点GetHeightForRow(UITableView tableView,NSIndexPath indexPath)
{
返回KittenCell.GetCellHeight();
}
受保护的覆盖UITableViewCell GetOrCreateCellFor(UITableView tableView,NSIndexPath indexPath,
对象项)
{
NSString单元标识符;
如果(项目是小猫)
{
cellIdentifier=KittenCellIdentifier;
}
否则,如果(项目是狗)
{
cellIdentifier=DogCellIdentifier;
}
其他的
{
抛出新ArgumentException(“类型未知的动物”+item.GetType().Name);
}
return(UITableViewCell)TableView.DequeueReusableCell(cellIdentifier,indexPath);
}
}
}
本视频提供了有关如何创建自定义单元格的大量信息,但似乎已经过时 它是在Xamarin 2.0和V3之前制作的,但原理非常相似 该文章的代码已更新-请参阅 除此之外:
- 在N+1系列中有很多表的使用演示-索引为
- N=2和N=3是非常基本的
- N=6和N=6.5包括一个书单(一个好的开始)
- N=11包括集合视图
- N=12到N=17使用数据库中的列表/表格制作大型应用程序
- “使用集合”示例有很多表和列表代码-
- 在演示过程中使用表格-
- 还有其他示例可用-请参阅(或在GitHub上搜索mvvmcross-其他示例也在发布)
public class PolymorphicListItemTypesView
: MvxTableViewController
{
public PolymorphicListItemTypesView()
{
Title = "Poly List";
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
var source = new TableSource(TableView);
this.AddBindings(new Dictionary<object, string>
{
{source, "ItemsSource Animals"}
});
TableView.Source = source;
TableView.ReloadData();
}
public class TableSource : MvxTableViewSource
{
private static readonly NSString KittenCellIdentifier = new NSString("KittenCell");
private static readonly NSString DogCellIdentifier = new NSString("DogCell");
public TableSource(UITableView tableView)
: base(tableView)
{
tableView.RegisterNibForCellReuse(UINib.FromName("KittenCell", NSBundle.MainBundle),
KittenCellIdentifier);
tableView.RegisterNibForCellReuse(UINib.FromName("DogCell", NSBundle.MainBundle), DogCellIdentifier);
}
public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
return KittenCell.GetCellHeight();
}
protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath,
object item)
{
NSString cellIdentifier;
if (item is Kitten)
{
cellIdentifier = KittenCellIdentifier;
}
else if (item is Dog)
{
cellIdentifier = DogCellIdentifier;
}
else
{
throw new ArgumentException("Unknown animal of type " + item.GetType().Name);
}
return (UITableViewCell) TableView.DequeueReusableCell(cellIdentifier, indexPath);
}
}
}