は、次のような何か試してみてください:あなたはあなたのXAMLでの動作特性にこれを追加できるようにリソースにEventAggregatorを利用できるようにすると
開始。
public class App : PrismApplication
{
protected override async void OnInitialized()
{
Resources.Add("eventAggregator", Container.Resolve<IEventAggregator>());
await NavigationService.NavigateAsync("MainPage");
}
}
あなたのObservableCollectionに
public class ScrollToMyModelEvent : PubSubEvent<MyModel>
{
}
を持つモデルタイプがIEventAggregatorのプロパティと動作を追加とるイベントを作成します。 注プロパティはBindableプロパティである必要はなく、実際には観測可能です。本当に必要なのは、EventAggregatorが設定されているときにイベントに登録することです。
public class ScrollToMyModelBehavior : BehaviorBase<ListView>
{
private IEventAggregator _eventAggregator;
public IEventAggregator EventAggregator
{
get => _eventAggregator;
set
{
if(!EqualityComparer<IEventAggregator>.Default.Equals(_eventAggregator, value))
{
_eventAggregator = value;
_eventAggregator.GetEvent<ScrollToMyModelEvent>().Subscribe(OnScrollToEventPublished);
}
}
}
private void OnScrollToEventPublished(MyModel model)
{
AssociatedObject.ScrollTo(model, ScrollToPosition.Start, true);
}
protected override void OnDetachingFrom(ListView bindable)
{
base.OnDetachingFrom(bindable);
// The Event Aggregator uses weak references so forgetting to do this
// shouldn't create a problem, but it is a better practice.
EventAggregator.GetEvent<ScrollToMyModelEvent>().Unsubscribe(OnScrollToEventPublished);
}
}
あなたのViewModelでは、単にイベントを公開するだけで済みます。私がここに示すように、ここで行うことができるのは、あなたが戻るまでナビゲートするときだけです。これは、Behaviorで処理され、ListViewのScrollToメソッドに渡されます。
public class MyListPageViewModel : BindableBase, INavigatedAware
{
private IEventAggregator _eventAggregator { get; }
public MyListPageViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public ObservableCollection<MyModel> MyModels { get; set; }
public MyModel SelectedModel { get; set; }
public void OnNavigatedTo(NavigationParameters)
{
if(parameters.GetNavigationMode() == NavigationMode.Back &&
SelectedModel != null)
{
_eventAggregator.GetEvent<ScrollToMyModelEvent>()
.Publish(SelectedModel);
}
}
}
は、その後、あなたのビューで
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:behavior="clr-namespace:AwesomeApp.Behaviors"
x:Class="AwesomeApp.ScrollToPage">
<ListView>
<ListView.Behaviors>
<behavior:ScrollToMyModelBehavior EventAggregator="{StaticResource eventAggregator}" />
</ListView.Behaviors>
</ListView>
</ContentPage>
あなたは、このリンクを参照することができます。 [https://stackoverflow.com/a/40452064/5293268] – Sunny