我正在使用Xamarin和MVVMCross来实现IOS应用程序。我正在研究的一个视图是正确显示的,但是当我硬编码被绑定到我的ViewModel内部的数据时,而不是当(因为设计和必要性)我的数据从SQLite迟到时,在视图之后只有一个不确定的时间显示。
到目前为止我正在使用和完成的内容:
问题:
我似乎无法做到:
THE CODE(TM)
CollectionView 单元格如下实现。我在线跟踪了所有的例子,并从Stuart Bloke和他的小猫那里得到了确保我完全实现所有模式:
[Register("MyCell")]
public partial class MyCell : MvxCollectionViewCell
{
public static readonly UINib Nib = UINib.FromName("MyCell", NSBundle.MainBundle);
public static readonly NSString Key = new NSString("MyCell");
public MyCell(IntPtr handle) : base(handle)
{
this.DelayBind(() => {
var set = this.CreateBindingSet<MyCell, SomeModelClass>();
set.Bind(Label1).To(item => item.Label1);
set.Bind(Label2).To(item => item.Label2);
set.Apply();
});
}
public static MyCell Create()
{
return (MyCell)Nib.Instantiate(null, null)[0];
}
}
View中的 ViewDidLoad()看起来像这样:
CollectionView.RegisterNibForCell(MyCell.Nib, MyCell.Key);
var source = new MvxCollectionViewSource(CollectionView, MyCell.Key);
CollectionView.Source = source;
var set = this.CreateBindingSet<MyView, MyViewModel>();
set.Bind(source).To(vm => vm.ListOfStuff);
set.Apply();
CollectionView.ReloadData();
NB!上面显示的 ListOfStuff 实际上只是一个包含2个字符串的自定义类的List。
TL:DR:我在调用上述代码时不知道 ListOfStuff 的值。当我在ViewModel中对它们进行硬编码时,我感到高兴。如果我不这样做,我就不会,即使数据在以后正确更新。
我现在联系你,众包的大脑神经元......
答案 0 :(得分:0)
不应使用List<T>
使用ObservableCollection<T>
,而应将新项目添加到CollectionView
。
UI需要知道集合何时发生了变化。 ObservableCollection<T>
实现INotifyCollectionChanged
和INotifyPropertyChanged
,并在集合发生变化时与UI进行通信。
如果您使用的是ReloadData()
,则不应再需要ObservableCollection<T>
。
添加IEnumerable<T>
public static class ObservableCollectionExtensionMethod
{
public static void AddRange<TSource>(this ObservableCollection<TSource> source, IEnumerable<TSource> collection)
{
foreach (var i in collection) source.Add(i);
}
}