Как передать строку через команду на новую страницу - PullRequest
0 голосов
/ 04 января 2019

Я сталкиваюсь с проблемой отправки строкового параметра в качестве фонового изображения моей новой страницы. То, что я хочу достичь, это как список объектов, каждый объект имеет строку нового фонового изображения, после нажатия на значок объекта пользователь перенаправляется на новую страницу с фоновым изображением. Проблема в том, что при отправке параметра возникает необработанное исключение

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}"
         >

То, что вы видите здесь, работает хорошо и, как и ожидалось, но только при нажатии на элемент списка. Как я могу передать фоновое изображение в качестве параметра, хотя команда? Заранее спасибо за любые идеи. Если возможно, я могу попросить объяснения. Еще одно спасибо :)

...