Я сталкиваюсь с проблемой отправки строкового параметра в качестве фонового изображения моей новой страницы. То, что я хочу достичь, это как список объектов, каждый объект имеет строку нового фонового изображения, после нажатия на значок объекта пользователь перенаправляется на новую страницу с фоновым изображением. Проблема в том, что при отправке параметра возникает необработанное исключение
Unhandled Exception:
System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта. произошло
Вот что я написал, чтобы добиться этого:
MainPage xaml
<ListView x:Name="wasteListView"
ItemsSource="{Binding Wastes}"
HasUnevenRows="True"
Margin="10,20,5,150"
SeparatorVisibility="None"
BackgroundColor="Transparent"
ItemTapped="OnSelectedItem"
>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ProgressBar x:Name="progressBar"
Grid.RowSpan="2" Grid.Row="0" Grid.Column="0"
BackgroundColor="Transparent"
ProgressColor="#614c96"
Progress="{Binding ObjectCounter}"
/>
<ImageButton x:Name="iconButton"
Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"
WidthRequest="100"
HeightRequest="100"
Aspect="AspectFit"
BackgroundColor="Transparent"
Source="{Binding ObjcetIcon}"
Command="{x:Binding Source={x:Reference wasteListView}, Path=BindingContext.NavigationCommand}"
CommandParameter="{x:Binding .}">
</ImageButton>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Основной код страницы:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var pageServices = new PageServices();
BindingContext = new MainViewModel(pageServices);
}
private async void OnSelectedItem(object sender, ItemTappedEventArgs e)
{
var sampleDetails= e.Item as SampleModel;
await Navigation.PushAsync(new Page1(sampleDetails), true);
}
}
}
MainViewModel
public ObjectModel sample;
public MainViewModel(IPageServices pageServices)
{
this._pageServices = pageServices;
Wastes = GetWastes();
NavigationCommand= new Command(NavigateToObejctPage);
}
void NavigateToObjectPage(object obj)
{
_pageServices.PushAsync(new Page1(sample));
}
Службы страниц - это моя навигационная служба
Код страницы:
public Page1(SampleModel sampleModel)
{
InitializeComponent();
//This is working when i tapped item from list view,
BackgroundImage = sampleModel.SampleBackgroundImage;
}
Page1 xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="AppDemo.Page1"
xmlns:vm="clr-namespace:AppDemo.ViewModels"
NavigationPage.HasNavigationBar="True"
BackgroundImage="{x:Binding sampleModel.SampleBackgroundImage}"
>
То, что вы видите здесь, работает хорошо и, как и ожидалось, но только при нажатии на элемент списка. Как я могу передать фоновое изображение в качестве параметра, хотя команда? Заранее спасибо за любые идеи. Если возможно, я могу попросить объяснения. Еще одно спасибо :)