我正在搜索这篇文章数周!
更新
是否可以通过MVVM模式控制xamarin表单中Listview的滚动位置?获取并设置Listview的滚动位置。
有一些答案,例如实现事件聚合或使用消息传递或...。 他们俩都没有为我工作。消息传递不是完全MVVM模式的方式。即使使用棱镜7,事件聚合也不起作用。 没有这么好的示例代码或任何nuget包。
有人遇到这个问题并解决了吗?
答案 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);
}
}