似乎分配 Scrolled 事件委托会删除先前分配的委托,因此您只能在此 link 中拥有一个委托的更多信息。
一个对我有用的解决方案是覆盖源中的 Scrolled 并使用 TableView 将消息发布回 ViewController,如下所示:
具有覆盖滚动发布 ScrolledMessage 的表源
public class MyTableSource : MvxTableViewSource
{
private IMvxMessenger _mvxMessenger;
public MyTableSource (UITableView tableView)
: base (tableView)
{
_mvxMessenger = Mvx.Resolve<IMvxMessenger>();
tableView.RegisterNibForCellReuse (MyCell.Nib, MyCell.Key);
}
public override void Scrolled (UIScrollView scrollView)
{
_mvxMessenger.Publish<ScrolledMessage>(new ScrolledMessage(this, scrollView.ContentOffset.Y));
}
// Other overriden methods
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
// implement this
}
public override nfloat GetHeightForRow (UITableView tableView, NSIndexPath indexPath)
{
// implement this
}
public override nfloat EstimatedHeight (UITableView tableView, NSIndexPath indexPath)
{
// implement this
}
protected override UITableViewCell GetOrCreateCellFor (UITableView tableView, NSIndexPath indexPath, object item)
{
// implement this
}
}
滚动消息
public class ScrolledMessage : MvxMessage
{
public nfloat Offset { get; set; }
public ScrolledMessage (object sender, nfloat offset) : base(sender)
{
Offset = offset;
}
}
接收滚动消息的视图控制器
public class FirstView : MvxViewController
{
private MvxSubscriptionToken _token;
private IMvxMessenger _mvxMessenger;
UITableView TableView;
public override void ViewDidLoad ()
{
_mvxMessenger = Mvx.Resolve<IMvxMessenger>();
_token = _mvxMessenger.SubscribeOnMainThread<ScrolledMessage>(message => Scrolled (message.Offset));
TableView = new UITableView (new CGRect(0, 0, View.Frame.Width, View.Frame.Height));
source = new MyTableSource (TableView);
TableView.Source = source;
Add (TableView);
var set = this.CreateBindingSet<FirstView, FirstViewModel> ();
set.Bind (source).For(s => s.ItemsSource).To (vm => vm.Items);
set.Apply ();
TableView.ReloadData ();
}
void Scrolled(nfloat offset)
{
// Do scroll here
}
}
希望这会有所帮助。