145 messaggi dal 08 settembre 2006
Buongiorno,

sto iniziando a sviluppare un progetto xamarin forms con visual studio 2017 aggiornato all'ultima versione (15.6.7) e sto incontrando qualche difficoltà, prima cosa alla creazione del progetto dopo aver selezionato Mobile App la successiva finestra non presenta più l'opzione PCL ma solo shared project e .NET standard, è normale?

in precedenza, prima che aggiornassi vs2017 questa opzione era presente

inoltre nella pagina ManPage.xaml sto iniziando a creare un layout ma non funziona la generazione automatica degli eventi associali ai controlli, ad esempio se inserisco un pulsante in questo modo :

Button Text="Test button" Margin="50,100,50,50" BackgroundColor="Red"

e aggiungo la proprietà Clicked mi aspetterei che l'ambiente mi facesse aggiungere un eventhandler che poi dovrebbe aggiungere il metodo relativo nel MainPage.xaml.cs, invece questa cosa non funziona e sono costretto a scrivere il metodo a mano con lo stesso nome inserito nel file xaml, anche questo è normale?

Grazie
203 messaggi dal 22 gennaio 2017
Contributi
.NET Standard sostituisce la vecchia PCL.

Per gli eventi non so indicarti, non li uso mai perchè passo dal ViewModel e dai Command.
145 messaggi dal 08 settembre 2006
Ciao, sempre riguardo la stessa applicazione xamarin sto aggiungendo la gestione di un database locale SQLite; ho trovato diverso materiale e sono riuscito a creare un sistema funzionante ma ho alcuni dubbi :

1-per aprire la connessione al db è necessario scrivere del codice specifico per ogni piattaforma dato che la 'gestione' delle directory è diversa in uwp, android e IOS, ad esempio nel primo caso uso questo codice :

var sqliteFilename = "Member.sqlite";
string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, sqliteFilename);
var conn = new SQLite.SQLiteConnection(path);

lavorando sul pc, per il debug, la cartella che risponde a questo codice è di questo tipo :

C:\Users\utente\AppData\Local\Packages\03fe9f1a-8c49-4055-b93d-c353ca4aa4c8_3ncqcwh9h2a3j\LocalState

se cerco di usare un path fisso (c:\\Database") la SQLiteConnection genera l'errore, unable to open database.....

perchè questo? solo quella cartella è permessa?

e nel momento in cui lavorerò sul device quale sarà la directory utilizzata? faccio questa domanda perchè nel mio caso il db esiste già e viene popolato in parte dall'esterno quindi bisogna che sappia preventivamente dove metterlo sul device.

inoltre la libreria che ho utilizzato è la sqlite-net-pcl che utilizza una sintassi simil linq, ho letto però che si può usare anche ADO.NET per scrivere le query in modo tradizionale ma ho trovato notevoli difficoltà nell'utilizzo; è possibile usare anche questa libreria?

grazie
Modificato da bryger il 22 maggio 2018 13.08 -
203 messaggi dal 22 gennaio 2017
Contributi
Con questo pacchetto hai .netstandard
https://github.com/everton-santos/sqlite-net/blob/master/README.md

Scrivi codice cross platform.
145 messaggi dal 08 settembre 2006
Sì, è il pacchetto che ho usato, il codice è più o meno identico a quello che ho usato io; non dice però nulla sulla posizione del file di database e sul perchè sono permessi solo alcuni path...
203 messaggi dal 22 gennaio 2017
Contributi
Penso che con questo pacchetto Cross Platform sul filesystem dovresti raggiungere l'obiettivo:
https://blog.xamarin.com/simple-cross-platform-file-io-for-ios-android-and-windows/
665 messaggi dal 08 aprile 2009
Per ogni cosa che è diversa per i vari dispositivi devi scrivere delle interfacce.
Nella tua PCL fai delle chiamete a metodi i quali richiamano le funzioni di interfaccia e poi sarà in automatico il gestore a fare quella appropriata sencod in sistema in cui ti trovi.
Quello del path dove risiede il database è il caso di esempio specifico ma andando in uno strato superiore è proprio dove risiede la cartella della tua applicazione.
Ti avverto che una volta capito le interfacce ne farai gran uso nella tua applicazione Cross Platform ed è in sostanza quello che fa Xamarin.Form nella sua dll.

ESEMPIO di recupero APPLICATION PATH:
nella tua PCL fai una classe con una property statica ApplicationPath:

   public static string ApplicationPath
        {
            get
            {
               return DependencyService.Get<Interfacce.ILocalFiles>().ApplicationPath("cartella-app");
            }
        }


In questo modo in qualsiasi momento nella tua PCL puoi sapere qual'è il percorso della tua applicazione.

Con DependencyService.Get ricghiami sempre un metodo di interfaccia.

Creazione Interfaccia:
sempre nella tua PCL ti fai una classe di tipo interfaccia:

    public interface ILocalFiles
    {

      

        string ApplicationPath(string AppDir);
      

    }



poi all'interno di ogni progetto specifico di piattaforma vai ad implementare l'interfaccia con il codice specifico:

Android:
[assembly: Dependency(typeof(Interfacce.LocalFiles))]
namespace Interfacce
{
    public class LocalFiles:ILocalFiles
    {
       
        public string ApplicationPath(string AppDir)
        {
            var storage_path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;

            return Path.Combine(storage_path, AppDir);
        }

       
       
    }
}


UWP:

[assembly: Dependency(typeof(Interfacce.LocalFiles))]
namespace Interfacce
{
public class LocalFiles : ILocalFiles
{

public string ApplicationPath(string AppDir)
{

var storage_path = ApplicationData.Current.RoamingFolder.Path;
return Path.Combine(storage_path, AppDir);
}


}
}


A questo punto poi passare all'instanza SqlLite il data base è semplice perchè ti basta combinare dal tuo PCL ApplicationPath con il nome del database che hai assegnato.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.