Я работаю над приложением Xamarin Forms UWP, и у меня есть страница, которая загружает список возможностей (Моя собственная модель). Представление списка работает нормально, когда я пытаюсь получить к нему доступ в первый раз. Я могу щелкнуть элемент в представлении списка, и он загрузит другую страницу, содержащую более подробную информацию, относящуюся к этому конкретному элементу возможности в представлении списка. Затем я могу нажать кнопку «Назад» и перейти на страницу, содержащую вид списка, а затем выбрать другой элемент и перейти на страницу, на которой отображаются дополнительные сведения, относящиеся к этому конкретному элементу возможности.
Проблема возникает, когда я нажимаю на совершенно другую страницу, а затем пытаюсь вернуться обратно на страницу, которая загружает просмотр списка возможностей. Представление списка будет загружаться правильно, но когда я пытаюсь щелкнуть по одному из элементов, он не переходит на страницу, на которой отображаются дополнительные сведения, относящиеся к этому элементу, а это означает, что itemtapped / ItemSelected по какой-то причине не запускается снова.
Я использую PRISM, и я также использовал Событие Призмы для Командного Поведения. Затем я переключился и закончил тем, что создал свое собственное событие для командного поведения и установил для параметра Listview.SelectedItem значение null в методе OnDetachingFrom (), но я все еще вижу те же результаты.
Я также попытался установить нулевой SelectedItem в коде позади. Все еще не работал.
В версии для Android все работает хорошо. В чем может быть проблема здесь?
Любая помощь высоко ценится. Я новичок, и это мое первое приложение Forms.
<!--My OpportunitiesPage View-->
<ScrollView>
<ListView x:Name="OpportunitiesList" CachingStrategy="RecycleElement" BackgroundColor="Transparent" RowHeight="200" ItemsSource="{Binding OpportunitiesList, Mode=TwoWay}" SeparatorVisibility="None" SelectedItem="{Binding SelectedOpportunity, Mode=TwoWay}">
<ListView.Behaviors>
<Local:ItemSelectedToCommandBehaviour Command="{Binding SelectOpportunityCommand}"/>
</ListView.Behaviors>
<!--ViewCell stuff goes here-->
</ListView>
</ScrollView>
//My ViewModel for the Opportunities Page
public class OpportunitiesPageViewModel : BindableBase, INavigationAware
{
INavigationService _navigationService;
private DelegateCommand<Opportunities> _selectedOpportunityCommand;
public DelegateCommand<Opportunities> SelectedOpportunityCommand => _selectedOpportunityCommand ?? (_selectedOpportunityCommand = new DelegateCommand<Opportunities>(async (EventArgs)=> await ShowOpportunityDetails(EventArgs)));
public ICommand SelectOpportunityCommand { get; private set; }
private Opportunities _selectedOpportunity;
public Opportunities SelectedOpportunity { get { return _selectedOpportunity; } set => SetProperty(ref _selectedOpportunity, value); }
IList<Opportunities> _listCopy;
public IList<Opportunities> ListCopy { get { return _listCopy; } set => SetProperty(ref _listCopy, value); }
IList<Opportunities> _opportunitiesList;
public IList<Opportunities> OpportunitiesList { get { return _opportunitiesList; } set => SetProperty(ref _opportunitiesList, value); }
Opportunities _opportunity1;
Opportunities _opportunity2;
Opportunities _opportunity3;
Opportunities _opportunity4;
Opportunities _opportunity5;
public Opportunities Opportunity1 { get { return _opportunity1; } set => SetProperty(ref _opportunity1, value); }
public Opportunities Opportunity2 { get { return _opportunity2; } set => SetProperty(ref _opportunity2, value); }
public Opportunities Opportunity3 { get { return _opportunity3; } set => SetProperty(ref _opportunity3, value); }
public Opportunities Opportunity4 { get { return _opportunity4; } set => SetProperty(ref _opportunity4, value); }
public Opportunities Opportunity5 { get { return _opportunity5; } set => SetProperty(ref _opportunity5, value); }
public OpportunitiesPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
OpportunitiesList = new ObservableCollection<Opportunities>
{
new Opportunities
{
Id = 0,
HeaderImage = "https://images.unsplash.com/photo-1462899006636-339e08d1844e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80",
Author = "Justin Pillay",
DatePublished = DateTime.Now.ToShortDateString(),
Title = "Funding for SMMEs",
Body = "Lorem ipsum dolor sit amet,consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
Category= "Funding",
Organisation = "Yobuningi (Pty) Ltd",
ContactWebsite = "www.yobuningi.co.za",
ContactEmail = "info@yobuningi.co.za",
ContactNumber1 = "0111234567",
ContactNumber2 = "0111234567",
ContactPerson = null
},
new Opportunities
{
Id = 0,
HeaderImage = "https://images.unsplash.com/photo-1444653614773-995cb1ef9efa?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1355&q=80",
Author = "Justin Pillay",
DatePublished = DateTime.Now.ToShortDateString(),
Title = "Growth for SMMEs",
Body = "Lorem ipsum dolor sit amet,consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
Category = "Business Support",
Organisation = "Yobuningi (Pty) Ltd",
ContactWebsite = "www.yobuningi.co.za",
ContactEmail = "info@yobuningi.co.za",
ContactNumber1 = "0111234567",
ContactNumber2 = "0111234567",
ContactPerson = null
},
new Opportunities
{
Id = 0,
HeaderImage = "https://images.unsplash.com/photo-1507679799987-c73779587ccf?ixlib=rb-1.2.1&auto=format&fit=crop&w=1351&q=80",
Author = "Justin Pillay",
DatePublished = DateTime.Now.ToShortDateString(),
Title = "Business Support for SMMEs",
Body = "Lorem ipsum dolor sit amet,consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
Category = "Business Support",
Organisation = "Yobuningi (Pty) Ltd",
ContactWebsite = "www.yobuningi.co.za",
ContactEmail = "info@yobuningi.co.za",
ContactNumber1 = "0111234567",
ContactNumber2 = "0111234567",
ContactPerson = null
},
new Opportunities
{
Id = 0,
HeaderImage = "https://images.unsplash.com/photo-1517245386807-bb43f82c33c4?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80",
Author = "Justin Pillay",
DatePublished = DateTime.Now.ToString(),
Title = "New Incubation Hub to open in Johannesburg",
Body = "Lorem ipsum dolor sit amet,consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
Category = "Business Support",
Organisation = "Yobuningi (Pty) Ltd",
ContactWebsite = "www.yobuningi.co.za",
ContactEmail = "info@yobuningi.co.za",
ContactNumber1 = "0111234567",
ContactNumber2 = "0111234567",
ContactPerson = null
},
new Opportunities
{
Id = 0,
HeaderImage = "https://images.unsplash.com/photo-1545239249-27f6fa8b6b4a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=600&q=60",
Author = "Justin Pillay",
DatePublished = DateTime.Now.ToShortDateString(),
Title = "Aunty Sameema gonna soot you!",
Body = "Lorem ipsum dolor sit amet,consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
Category = "Networking",
Organisation = "Yobuningi (Pty) Ltd",
ContactWebsite = "www.yobuningi.co.za",
ContactEmail = "info@yobuningi.co.za",
ContactNumber1 = "0111234567",
ContactNumber2 = "0111234567",
ContactPerson = null
}
};
SelectOpportunityCommand = new Command(async () => { await ShowOpportunityDetails(SelectedOpportunity); });
}
private async Task ShowOpportunityDetails(Opportunities opportunity)
{
var p = new NavigationParameters();
p.Add("SelectedOpportunity", opportunity);
await _navigationService.NavigateAsync("ViewOpportunityPage", p);
}
//My Event to Command Behaviour
public class ItemSelectedToCommandBehaviour : Behavior<ListView>
{
public static readonly BindableProperty CommandProperty = BindableProperty.Create(propertyName:"Command", returnType:typeof(ICommand), declaringType:typeof(ItemSelectedToCommandBehaviour));
public ICommand Command
{
get
{
return (ICommand)GetValue(CommandProperty);
}
set
{
SetValue(CommandProperty, value);
}
}
protected override void OnAttachedTo(ListView bindable)
{
base.OnAttachedTo(bindable);
bindable.ItemSelected += BindableOnItemSelected;
bindable.BindingContextChanged += Bindable_BindingContextChanged;
}
private void Bindable_BindingContextChanged(object sender, EventArgs e)
{
var lv = sender as ListView;
BindingContext = lv?.BindingContext;
}
protected override void OnDetachingFrom(ListView bindable)
{
base.OnDetachingFrom(bindable);
bindable.SelectedItem = null;
bindable.ItemSelected -= BindableOnItemSelected;
bindable.BindingContextChanged -= Bindable_BindingContextChanged;
}
private void BindableOnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
Command.Execute(null);
}
}