Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C#] Passare parametri in Master/Page con XAML

    ciao!

    il mio XAML di base è questo (MainPage.xaml):
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr-namespace:Book.Views" x:Class="Book.Views.MainPage">
        <MasterDetailPage.Master>
            <views:MenuPage />
        </MasterDetailPage.Master>
        <MasterDetailPage.Detail>
            <NavigationPage>
                <NavigationPage.Icon>
                    <OnPlatform x:TypeArguments="FileImageSource">
                        <On Platform="iOS" Value="tab_feed.png" />
                    </OnPlatform>
                </NavigationPage.Icon>
                <x:Arguments>
                    <views:ItemsPage /> --> ERRORE
                </x:Arguments>
            </NavigationPage>
        </MasterDetailPage.Detail>
    </MasterDetailPage>
    ho indicato dove ottengo l'errore.
    quwsto errore lo ottengo da quando ho aggiunto un parametro al costruttore di ItemsPage:
    codice:
    namespace Book.Views
    {
        [XamlCompilation(XamlCompilationOptions.Compile)]
        public partial class ItemsPage : ContentPage
        {
            ItemsViewModel viewModel;
    
            public ItemsPage(string strFile)
            {
                InitializeComponent();
    
                BindingContext = viewModel = new ItemsViewModel(strFile);
            }
    
        }
    }
    l'errore di compilazione che ottengo è questo:
    codice:
    MainPage.xaml: Error: The given key 'Xamarin.Forms.Xaml.ElementNode' was not present in the dictionary.
    qualche idea??

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Ciao
    credo che stia ottenendo quell'errore a causa del fatto che itempage non ha un costruttore vuoto e da xaml non passi parametri al costruttore quando viene creata, quindi va in errore perchè cerca appunto il costruttore vuoto che no c'è.
    Il mio consiglio è di provare una cosa del genere:
    codice:
    <views:ItemsPage>
        <x:Arguments>
             <x:String>stringa da passare al costruttore</x:String>
        </x:Arguments>
    </views:ItemsPage>
    

  3. #3
    ciao!

    infatti ho creato due costruttori: uno vuoto e uno con parametri.
    poi, nel model, ho messo il parametro con un valore di default.
    in questo modo, la prima volta che viene lanciato, si prende quello di default.
    le altre volte, lanciato da voci di menu, gli passo il valore che mi serve.

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    ok, quindi hai risolto? in teoria bastava anche (appunto) aggiungere un costruttore vuoto.

  5. #5
    si ho risolto così:
    codice:
            public ItemsPage()
            {
                InitializeComponent();
                BindingContext = viewModel = new ItemsViewModel();
            }
    
    
            public ItemsPage(string strFile, string titolo)
            {
                InitializeComponent();
                BindingContext = viewModel = new ItemsViewModel(strFile, titolo);
            }
    poi il model:
    codice:
            public ItemsViewModel(string strFile = Costanti.allBooks)
            {
                remoteFile = strFile;
    
                Title = titolo;
                Items = new ObservableCollection<Item>();
                LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
                MessagingCenter.Subscribe<NewItemPage, Item>(this, "AddItem", async (obj, item) =>
                {
                    var newItem = item as Item;
                    Items.Add(newItem);
                    await DataStore.AddItemAsync(newItem);
                });
            }
    probabilmente non è il modo migliore, però va bene per quello che mi serve.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.