Xamarin Forms ListView滚动位置-MVVM

时间:2018-08-18 15:19:07

标签: c# listview scroll xamarin.forms

我正在搜索这篇文章数周!

更新

是否可以通过MVVM模式控制xamarin表单中Listview的滚动位置?获取并设置Listview的滚动位置。

有一些答案,例如实现事件聚合或使用消息传递或...。 他们俩都没有为我工作。消息传递不是完全MVVM模式的方式。即使使用棱镜7,事件聚合也不起作用。 没有这么好的示例代码或任何nuget包。

有人遇到这个问题并解决了吗?

1 个答案:

答案 0 :(得分:0)

CustomersViewModel

public ObservableCollection<Customer> Customers {get;set;}
public Func<Customer,Task> ScrollToCustomer {get;set;}
public DelegateCommand FindBestCustomer {get;set;} // For example    
FindBestCustomer = new DelegateCommand(async() => 
{ 
    Customer bestCustomer = Customers.Last(); // this is our logic in view model!
    await ScrollToCustomer(bestCustomer);
    // at this time, scroll is finished.
});

CustomersView.xaml

<StackLayout>
    <ListView x:Name="CustomersListView" ItemsSource={Binding Customers} />
    <Button Text="Go to last customer" Command="{Binding ScrollToLastCustomer}" /> // For example
</StackLayout>

CustomersView.xaml.cs

override OnBindingContextChanged()
{
    if(BindingContext is CustomersViewModel customersViewModel)
    {
        customersViewModel.ScrollToCustomer = customer => CustomersListView.ScrollTo(customer);
    }
}