{"id":5010,"date":"2021-02-01T10:12:34","date_gmt":"2021-02-01T10:12:34","guid":{"rendered":"https:\/\/serkanseker.com\/?p=5010"},"modified":"2021-02-01T10:12:34","modified_gmt":"2021-02-01T10:12:34","slug":"xamarin-forms-sqlite-kullanimi","status":"publish","type":"post","link":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/","title":{"rendered":"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService"},"content":{"rendered":"<div class=\"entry-content entry clearfix\">\n<p>Bu yaz\u0131mda Xamarin.Forms ile daha \u00f6nceden geli\u015ftirdi\u011fim <a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-openweathermap-rest-api-kullanimi\/\" rel=\"noreferrer noopener\" target=\"_blank\">Hava Durumu<\/a> uygulamas\u0131na SQLite ile yerel veritaban\u0131 ekleyece\u011fim.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"1_XamarinForms_projenize_SQLite_eklentisini_yukleyin\">1) Xamarin.Forms projenize SQLite eklentisini y\u00fckleyin<\/span><\/h2>\n<p>\u00d6ncelikle, Xamarin.Forms projenizde SQLite ile bir veritaban\u0131 olu\u015fturabilmek i\u00e7in <a href=\"https:\/\/www.nuget.org\/packages\/sqlite-net-pcl\/1.8.0-beta\" rel=\"noreferrer noopener\" target=\"_blank\">sqlite-net-pcl<\/a> eklentisini y\u00fcklemelisiniz.<\/p>\n<p>Paket Y\u00f6neticisi Konsolunda a\u015fa\u011f\u0131daki kodu \u00e7al\u0131\u015ft\u0131rarak eklentiyi y\u00fckleyebilirsiniz. (bkz. <strong><a href=\"https:\/\/www.serkanseker.com\/tr\/visual-studio-nuget-paketlerini-yukleme\/#paket-y%C3%B6neticisi-konsolu\" rel=\"noreferrer noopener\" target=\"_blank\">Paket Y\u00f6neticisi Konsolu ile NuGet Paketlerini Y\u00fckleme<\/a><\/strong>)<\/p>\n<pre class=\"wp-block-code\"><code>Install-Package sqlite-net-pcl -Version 1.8.0-beta<\/code><\/pre>\n<p>Alternatif olarak,\u00a0eklentiyi NuGet Paket Y\u00f6neticisinden de y\u00fckleyebilirsiniz. (bkz. <strong><a href=\"https:\/\/www.serkanseker.com\/tr\/visual-studio-nuget-paketlerini-yukleme\/#paket-y%C3%B6neticisi-konsolu\" rel=\"noreferrer noopener\" target=\"_blank\"><strong><\/strong><\/a><strong><a href=\"https:\/\/www.serkanseker.com\/tr\/visual-studio-nuget-paketlerini-yukleme\/#nuget-paket-y%C3%B6neticisi\">NuGet Paket Y\u00f6neticisi \u0130le NuGet Paketlerini Y\u00fckleme<\/a><\/strong><\/strong>)<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" alt=\"Xamarin Forms SQLite NuGet Paketi\" class=\"wp-image-250\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 980px) 100vw, 980px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg 980w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi-300x186.jpg 300w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi-768x476.jpg 768w\" height=\"607\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"980\" \/><figcaption>NuGet Paket Y\u00f6neticisi ile SQLite eklentisini y\u00fckleyin<\/figcaption><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\"><span id=\"2_IDatabase_interface8217si_ekleyin\">2) IDatabase interface\u2019si ekleyin<\/span><\/h2>\n<p><a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-mvvm-model\/\" rel=\"noreferrer noopener\" target=\"_blank\">MVVM modelinde<\/a> Data klas\u00f6r\u00fcnde, veritaban\u0131 i\u015flemlerinin yap\u0131laca\u011f\u0131 s\u0131n\u0131flar ve interface\u2019ler yer al\u0131r.<\/p>\n<p>Projeye <strong>Data <\/strong>adl\u0131 bir klas\u00f6r ekleyin ve bu klas\u00f6re <strong>IDatabase.cs <\/strong>adl\u0131 bir interface ekleyin. <\/p>\n<p>IDatabase interface\u2019sinde GetConnection() ad\u0131nda bir method tan\u0131mlay\u0131n. Android yerel platformunda bir veritaban\u0131 ba\u011flant\u0131s\u0131 olu\u015ftururken bu methodu override edeceksiniz. Yani Android platformunun \u00f6zelliklerini DependencyService ile Xamarin.Forms\u2019da kullanacaks\u0131n\u0131z.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public interface IDatabase\n{\n    SQLiteConnection GetConnection();\n}<\/code><\/pre>\n<h2 class=\"wp-block-heading\"><span id=\"3_SQLite_Dependecy_Service_ekleyin\">3) SQLite Dependecy Service ekleyin<\/span><\/h2>\n<p>\u015eimdi projenizin Android klas\u00f6r\u00fcne <strong>Connection <\/strong>adl\u0131 bir klas\u00f6r ekleyin.\u00a0Ard\u0131ndan Connection klas\u00f6r\u00fcne <strong>SQLiteConnection.cs<\/strong> adl\u0131 bir s\u0131n\u0131f ekleyin.\u00a0<\/p>\n<p><strong>SQLiteConnection.cs<\/strong> s\u0131n\u0131f\u0131 IDatabase interface\u2019sini implement eder ve dolay\u0131s\u0131yla GetConnection() methodunu override etmek zorundad\u0131r. GetConnection() methodu i\u00e7erisinde Places.db ad\u0131nda bir veritaban\u0131 olu\u015fturun ve SQLite ba\u011flant\u0131s\u0131 kurun.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">[assembly: Dependency(typeof(Weather.Droid.Connection.SQLiteConnection))]\nnamespace Weather.Droid.Connection\n{\n    class SQLiteConnection : IDatabase\n    {\n        public SQLite.SQLiteConnection GetConnection()\n        {\n            var filename = &quot;Places.db&quot;;\n            var documentspath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);\n            var path = Path.Combine(documentspath, filename);\n            var connection = new SQLite.SQLiteConnection(path);\n            return connection;\n        }\n    }\n}<\/code><\/pre>\n<p>Ayr\u0131ca bu s\u0131n\u0131f\u0131n bir Dependency oldu\u011funu bildirmeyi unutmay\u0131n.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">[assembly: Dependency(typeof(Weather.Droid.Connection.SQLiteConnection))]<\/code><\/pre>\n<h2 class=\"wp-block-heading\"><span id=\"4_Model_sinifi_ekleyin\">4) Model s\u0131n\u0131f\u0131 ekleyin<\/span><\/h2>\n<p><strong>Models <\/strong>klas\u00f6r\u00fcne <strong>Places.cs<\/strong> adl\u0131 bir s\u0131n\u0131f ekleyin.\u00a0Bu s\u0131n\u0131f, Id, CityName, Latitude, Longitude ve City Key \u00f6zelliklerini i\u00e7erir.\u00a0Places s\u0131n\u0131f\u0131, ekleyece\u011finiz her bir yerin bilgilerini i\u00e7eren model s\u0131n\u0131f\u0131d\u0131r. Yani ileride veritaban\u0131na ekleyece\u011finiz her bir yer bu modele uygun olmal\u0131d\u0131r.<\/p>\n<p>Id property\u2019sindeki <strong>[PrimaryKey, AutoIncrement]<\/strong> ise Id\u2019nin birincil anahar ve otomatik artan bir de\u011fer oldu\u011funu g\u00f6sterir.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">public class Places\n{\n    [PrimaryKey, AutoIncrement]\n    public int Id { get; set; }\n    public string CityName { get; set; }\n    public double CityLat { get; set; }\n    public double CityLon { get; set; }\n    public string CityKey { get; set; }\n    }\n}<\/code><\/pre>\n<h2 class=\"wp-block-heading\"><span id=\"5_Database_sinifi_ekleyin\">5) Database s\u0131n\u0131f\u0131 ekleyin<\/span><\/h2>\n<p>Projeye <strong>Datas <\/strong>ad\u0131nda bir klas\u00f6r ekleyin ve bu klas\u00f6re <strong>Database.cs<\/strong> adl\u0131 bir s\u0131n\u0131f ekleyin. <\/p>\n<p>Bu s\u0131n\u0131f i\u00e7erisinde, \u00f6ncelikle Android platformunda olu\u015fturdu\u011funuz GetConnection() methodunu \u00e7a\u011f\u0131rarak veritaban\u0131 ile ba\u011flant\u0131 kurun.\u00a0Ard\u0131ndan veritaban\u0131nda \u201cPlaces\u201d adl\u0131 bir tablo olu\u015fturun. Daha sonra Places tablosunda CRUD ve di\u011fer veritaban\u0131 i\u015flemlerini uygulay\u0131n.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public class Database\n{\n    static object locker = new object();\n    SQLiteConnection _sqlconnection;\n    public Database()\n    {\n        _sqlconnection = DependencyService.Get&lt;IDatabase&gt;().GetConnection();\n        _sqlconnection.CreateTable&lt;Places&gt;();\n    }\n    public int Insert(Places place)\n    {\n        lock (locker)\n        {\n            return _sqlconnection.Insert(place);\n        }\n    }\n    public int Update(Places place)\n    {\n        lock (locker)\n        {\n            return _sqlconnection.Update(place);\n        }\n    }\n    public int Delete(int id)\n    {\n        lock (locker)\n        {\n            return _sqlconnection.Delete&lt;Places&gt;(id);\n        }\n    }\n    public IEnumerable&lt;Places&gt; GetAll()\n    {\n        lock (locker)\n        {\n            return (from i in _sqlconnection.Table&lt;Places&gt;() select i).ToList();\n        }\n    }\n    public int FullDelete()\n    {\n        lock (locker)\n        {\n            return _sqlconnection.DeleteAll&lt;Places&gt;();\n        }\n    }\n    public Places Get(int id)\n    {\n        lock (locker)\n        {\n            return _sqlconnection.Table&lt;Places&gt;().FirstOrDefault(t =&gt; t.Id == id);\n        }\n    }\n    public List&lt;Places&gt; GetFirst()\n    {\n        lock (locker)\n        {\n            return _sqlconnection.Query&lt;Places&gt;(&quot;SELECT * FROM Places LIMIT 1&quot;);\n        }\n    }\n    public void Dispose()\n    {\n        _sqlconnection.Dispose();\n    }\n}<\/code><\/pre>\n<h2 class=\"wp-block-heading\"><span id=\"6_ViewModel_siniflarini_ekleyin\">6) ViewModel s\u0131n\u0131flar\u0131n\u0131 ekleyin<\/span><\/h2>\n<p>Projeye SQLite eklerken iki tane Viewmodel s\u0131n\u0131f\u0131na ihtiyac\u0131n\u0131z var.\u00a0<\/p>\n<ul class=\"wp-block-list\">\n<li><span style=\"color: var(--nv-text-color);font-family: Graphik,-apple-system,BlinkMacSystemFont,Segoe UI,var(--nv-fallback-ff);background-color: var(--nv-site-bg)\">\u0130lki, veritaban\u0131nda kay\u0131tl\u0131 olan yerleri listeleyecek olan PlacesPage.xaml sayfas\u0131n\u0131n <\/span><strong style=\"color: var(--nv-text-color);font-family: Graphik,-apple-system,BlinkMacSystemFont,Segoe UI,var(--nv-fallback-ff);background-color: var(--nv-site-bg)\">PlacesViewModel.cs<\/strong><span style=\"color: var(--nv-text-color);font-family: Graphik,-apple-system,BlinkMacSystemFont,Segoe UI,var(--nv-fallback-ff);background-color: var(--nv-site-bg)\"> s\u0131n\u0131f\u0131.\u00a0<\/span><\/li>\n<li>\u0130kincisi, yeni bir konum ekleyece\u011finiz AddPlacesPage.xaml sayfas\u0131n\u0131n <strong>AddPlacesViewModel.cs<\/strong> s\u0131n\u0131f\u0131.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><span id=\"PlacesViewModelcs\">PlacesViewModel.cs<\/span><\/h3>\n<p>PlacesViewModel s\u0131n\u0131f\u0131nda, ilk olarak GetConnection() y\u00f6ntemi SQLite veritaban\u0131 ba\u011flant\u0131s\u0131 olu\u015fturur.\u00a0Daha sonra kurucu methodunda Databse s\u0131n\u0131f\u0131n\u0131n GetAll() methodu \u00e7a\u011f\u0131r\u0131l\u0131r ve kaydedilen t\u00fcm verileri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public class PlacesViewModel : INotifyPropertyChanged\n{\n    private static Database database = null;\n    private static Database GetConnection()\n    {\n        if (database == null)\n            database = new Database();\n        return database;\n    }\n    public event PropertyChangedEventHandler PropertyChanged;\n    private IEnumerable&lt;Places&gt; _places;\n    public IEnumerable&lt;Places&gt; Places\n    {\n        get\n        {\n            return _places;\n        }\n        set\n        {\n            _places = value;\n            OnPropertyChanged();\n        }\n    }\n    public PlacesViewModel()\n    {\n        Places = GetConnection().GetAll();\n    }\n        public ICommand BackCommand =&gt; new Command(Back);\n    private async void Back()\n    {\n       await App.Current.MainPage.Navigation.PopModalAsync();\n    }\n        public ICommand TapCommand =&gt; new Command(Tap);\n        private async void Tap()\n        {\n            await App.Current.MainPage.Navigation.PushModalAsync(new AddPlacesPage());\n        }\n    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n}<\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"AddPlacesViewModelcs\">AddPlacesViewModel.cs<\/span><\/h3>\n<p>AddPlacesViewModel s\u0131n\u0131f\u0131 AddPlacesPage.xaml sayfas\u0131na ba\u011flanacak olan s\u0131n\u0131ft\u0131r. Yani AddPlaces.xaml sayfas\u0131na girdi\u011finiz bilgileri SQLite veritaban\u0131na kaydedecek olan s\u0131n\u0131f.<\/p>\n<p>AddPlacesViewModel s\u0131n\u0131f\u0131na gerekli propertyleri ve komutlar\u0131 a\u015fa\u011f\u0131daki gibi ekleyin.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public class AddPlacesViewModel : INotifyPropertyChanged\n{\n    private string _cityName;\n    public string CityName\n    {\n        get { return _cityName; }\n        set\n        {\n            _cityName = value;\n            OnPropertyChanged();\n        }\n    }\n    private string _cityKey;\n    public string CityKey\n    {\n        get { return _cityKey; }\n        set\n        {\n            _cityKey = value;\n            OnPropertyChanged();\n        }\n    }\n    private double _cityLat;\n    public double CityLat\n    {\n        get { return _cityLat; }\n        set\n        {\n            _cityLat = value;\n            OnPropertyChanged();\n        }\n    }\n    private double _cityLon;\n    public double CityLon\n    {\n        get { return _cityLon; }\n        set\n        {\n            _cityLon = value;\n            OnPropertyChanged();\n        }\n    }\n    private Places places = new Places();\n    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n    public event PropertyChangedEventHandler PropertyChanged;\n    public AddPlacesViewModel()\n    {\n    }\n    public ICommand TapCommand =&gt; new Command(Tap);\n    private async void Tap()\n    {\n        Database database = new Database();\n        places.CityKey = CityKey;\n        places.CityName = CityName;\n        places.CityLat = CityLat;\n        places.CityLon = CityLon;\n        database.Insert(places);\n        await App.Current.MainPage.Navigation.PushModalAsync(new PlacesPage());\n    }\n    public ICommand BackCommand =&gt; new Command(Back);\n    private async void Back()\n    {\n        await App.Current.MainPage.Navigation.PopModalAsync();\n    }\n}<\/code><\/pre>\n<h2 class=\"wp-block-heading\"><span id=\"7_XAML_sayfalarini_ekleyin\">7) XAML sayfalar\u0131n\u0131 ekleyin<\/span><\/h2>\n<p>Projenizdeki <strong>Views <\/strong>klas\u00f6r\u00fcne <strong>PlacesPage.xaml<\/strong> ve <strong>AddPlaces.xaml<\/strong> adl\u0131 iki adet ContentPage ekleyin.\u00a0Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, konum ekleyece\u011finiz ve konumlar\u0131 g\u00f6r\u00fcnt\u00fcleyece\u011finiz sayfalar bunlar olacak.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"PlacesPagexaml\">PlacesPage.xaml<\/span><\/h3>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">1<\/span> Projenizin Views klas\u00f6r\u00fcne <strong>PlacesPage.xaml<\/strong> adl\u0131 bir ContentPage ekleyin. Bu XAML sayfas\u0131 veritaban\u0131nda kay\u0131tl\u0131 olan yerleri g\u00f6sterecek.<\/p>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">2<\/span> Ard\u0131ndan <strong>PlacesPage.xaml.cs<\/strong> s\u0131n\u0131f\u0131na gidin ve bu s\u0131n\u0131f\u0131n yap\u0131c\u0131 y\u00f6ntemine\u00a0BindingContext\u00a0nesnesi ile PlacesViewModel s\u0131n\u0131f\u0131n\u0131 ba\u011flay\u0131n. (<a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\" rel=\"noreferrer noopener\" target=\"_blank\">Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131<\/a>)<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public partial class PlacesPage : ContentPage\n{\n    public PlacesPage()\n    {\n        InitializeComponent();\n        BindingContext = new PlacesViewModel();\n    }\n}<\/code><\/pre>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">3<\/span> \u015eimdi PlacesPage.xaml sayfas\u0131n\u0131 a\u00e7\u0131n. Bu XAML sayfas\u0131na bir CollectionView ekleyin ve PlacesViewModel s\u0131n\u0131f\u0131ndaki Places IEnumarable\u2019sini ba\u011flay\u0131n. B\u00f6ylece veritaban\u0131ndaki veriler CollectionView i\u00e7erisinde g\u00f6r\u00fcnt\u00fclenecek.<\/p>\n<p>Daha sonra bir <a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-pancakeview-eklentisi-kullanimi\/\" rel=\"noreferrer noopener\" target=\"_blank\">PancakeView <\/a>i\u00e7erisinde sa\u011f alt k\u00f6\u015feye bir Flyout button ekleyin. <\/p>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"Xamarin.Forms PlacesPage Content Page\" class=\"wp-image-253\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 237px) 100vw, 237px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Places-Content-Page-473x1024.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Places-Content-Page-473x1024.jpg 473w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Places-Content-Page-709x1536.jpg 709w\" height=\"512\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"237\" \/><figcaption>Xamarin.Forms SQLite Places Content Page<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\n&lt;ContentPage xmlns=&quot;http:\/\/xamarin.com\/schemas\/2014\/forms&quot;\n             xmlns:x=&quot;http:\/\/schemas.microsoft.com\/winfx\/2009\/xaml&quot;\n             xmlns:d=&quot;http:\/\/xamarin.com\/schemas\/2014\/forms\/design&quot;\n             xmlns:mc=&quot;http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006&quot;\n             xmlns:pancakeview=&quot;clr-namespace:Xamarin.Forms.PancakeView;assembly=Xamarin.Forms.PancakeView&quot;\n             mc:Ignorable=&quot;d&quot;\n             x:Class=&quot;Weather.View.PlacesPage&quot;\n             BackgroundColor=&quot;#F5F8FD&quot;&gt;\n    &lt;AbsoluteLayout &gt;\n        &lt;Grid&gt;\n            &lt;Grid.RowDefinitions&gt;\n                &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n            &lt;\/Grid.RowDefinitions&gt;\n            &lt;StackLayout Grid.Row=&quot;0&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;20,10,20,10&quot;  &gt;\n                &lt;Grid&gt;\n                    &lt;Grid.ColumnDefinitions&gt;\n                        &lt;ColumnDefinition Width=&quot;Auto&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;*&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;Auto&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;*&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;Auto&quot; \/&gt;\n                    &lt;\/Grid.ColumnDefinitions&gt;\n                    &lt;pancakeview:PancakeView Grid.Column=&quot;0&quot; WidthRequest=&quot;41&quot; HeightRequest=&quot;41&quot; CornerRadius=&quot;10&quot;  BackgroundColor=&quot;#FFF&quot;&gt;\n                        &lt;pancakeview:PancakeView.Shadow&gt;\n                            &lt;pancakeview:DropShadow Color=&quot;#000&quot;\/&gt;\n                        &lt;\/pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:PancakeView.GestureRecognizers&gt;\n                            &lt;TapGestureRecognizer Command=&quot;{Binding BackCommand}&quot;\/&gt;\n                        &lt;\/pancakeview:PancakeView.GestureRecognizers&gt;\n                        &lt;Image Source=&quot;back.png&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView&gt;\n                    &lt;Label Grid.Column=&quot;2&quot; Text=&quot;Locations&quot; VerticalOptions=&quot;Center&quot; HorizontalOptions=&quot;Center&quot; FontSize=&quot;25&quot; FontAttributes=&quot;Bold&quot; TextColor=&quot;#7B7C7D&quot;\/&gt;\n                    &lt;pancakeview:PancakeView Grid.Column=&quot;4&quot; WidthRequest=&quot;41&quot; HeightRequest=&quot;41&quot; CornerRadius=&quot;10&quot; BackgroundColor=&quot;#FFF&quot;&gt;\n                        &lt;pancakeview:PancakeView.Shadow&gt;\n                            &lt;pancakeview:DropShadow Color=&quot;#000&quot;   \/&gt;\n                        &lt;\/pancakeview:PancakeView.Shadow&gt;\n                        &lt;Image Source=&quot;menu.png&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView&gt;\n                &lt;\/Grid&gt;\n            &lt;\/StackLayout&gt;\n            &lt;CollectionView Grid.Row=&quot;1&quot; SelectionMode=&quot;Single&quot;  ItemsSource=&quot;{Binding Places}&quot; SelectedItem=&quot;{Binding SelectedPlaces}&quot; SelectionChangedCommand=&quot;{Binding SelectionCommand}&quot;&gt;\n                &lt;CollectionView.ItemsLayout&gt;\n                    &lt;GridItemsLayout Orientation=&quot;Vertical&quot; \/&gt;\n                &lt;\/CollectionView.ItemsLayout&gt;\n                &lt;CollectionView.ItemTemplate&gt;\n                    &lt;DataTemplate &gt;\n                        &lt;StackLayout&gt;\n                            &lt;VisualStateManager.VisualStateGroups&gt;\n                                &lt;VisualStateGroup Name=&quot;CommonStates&quot;&gt;\n                                    &lt;VisualState Name=&quot;Normal&quot; &gt;\n                                        &lt;VisualState.Setters&gt;\n                                            &lt;Setter Property=&quot;BackgroundColor&quot; Value=&quot;Transparent&quot; \/&gt;\n                                        &lt;\/VisualState.Setters&gt;\n                                    &lt;\/VisualState&gt;\n                                    &lt;VisualState Name=&quot;Selected&quot;&gt;\n                                        &lt;VisualState.Setters&gt;\n                                            &lt;Setter Property=&quot;BackgroundColor&quot; Value=&quot;#b9ceeb&quot; \/&gt;\n                                        &lt;\/VisualState.Setters&gt;\n                                    &lt;\/VisualState&gt;\n                                &lt;\/VisualStateGroup&gt;\n                            &lt;\/VisualStateManager.VisualStateGroups&gt;\n                            &lt;pancakeview:PancakeView BackgroundColor=&quot;#87a8d0&quot; HeightRequest=&quot;120&quot; WidthRequest=&quot;350&quot; CornerRadius=&quot;20&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;20,10,20,10&quot;&gt;\n                                &lt;Grid &gt;\n                                    &lt;Grid.RowDefinitions&gt;\n                                        &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                                        &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                                        &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                                        &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                                        &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                                    &lt;\/Grid.RowDefinitions&gt;\n                                    &lt;Grid.ColumnDefinitions&gt;\n                                        &lt;ColumnDefinition Width=&quot;*&quot;\/&gt;\n                                        &lt;ColumnDefinition Width=&quot;*&quot;\/&gt;\n                                        &lt;ColumnDefinition Width=&quot;*&quot;\/&gt;\n                                    &lt;\/Grid.ColumnDefinitions&gt;\n                                    &lt;Label Grid.Row=&quot;0&quot; Grid.Column=&quot;0&quot; Grid.RowSpan=&quot;2&quot; Grid.ColumnSpan=&quot;2&quot; Text=&quot;{Binding CityName}&quot; TextColor=&quot;White&quot; FontSize=&quot;41&quot; HorizontalOptions=&quot;StartAndExpand&quot; VerticalOptions=&quot;CenterAndExpand&quot; Margin=&quot;10,0,0,0&quot;  \/&gt;\n                                    &lt;Label Grid.Row=&quot;2&quot; Grid.Column=&quot;0&quot; Grid.ColumnSpan=&quot;2&quot; Text=&quot;{Binding CityKey, StringFormat=&#039;City Key: {0:N0}&#039;}&quot;  TextColor=&quot;White&quot; FontSize=&quot;15&quot; HorizontalOptions=&quot;StartAndExpand&quot; VerticalOptions=&quot;CenterAndExpand&quot; Margin=&quot;15,-10,0,0&quot;  \/&gt;\n                                    &lt;Label Grid.Row=&quot;3&quot; Grid.Column=&quot;0&quot; Grid.ColumnSpan=&quot;2&quot; Text=&quot;{Binding CityLat, StringFormat=&#039;Latitude: {0:N0}&#039;}&quot; TextColor=&quot;White&quot; FontSize=&quot;15&quot; HorizontalOptions=&quot;StartAndExpand&quot; VerticalOptions=&quot;CenterAndExpand&quot; Margin=&quot;15,-10,0,0&quot;  \/&gt;\n                                    &lt;Label Grid.Row=&quot;4&quot; Grid.Column=&quot;0&quot; Grid.ColumnSpan=&quot;2&quot; Text=&quot;{Binding CityLon, StringFormat=&#039;Longitude: {0:N0}&#039;}&quot; TextColor=&quot;White&quot; FontSize=&quot;15&quot; HorizontalOptions=&quot;StartAndExpand&quot; VerticalOptions=&quot;CenterAndExpand&quot; Margin=&quot;15,-10,0,0&quot;  \/&gt;\n                                &lt;\/Grid&gt;\n                            &lt;\/pancakeview:PancakeView&gt;\n                        &lt;\/StackLayout&gt;\n                    &lt;\/DataTemplate&gt;\n                &lt;\/CollectionView.ItemTemplate&gt;\n            &lt;\/CollectionView&gt;\n        &lt;\/Grid&gt;\n        &lt;pancakeview:PancakeView AbsoluteLayout.LayoutBounds=&quot;0.90,0.95,60,60&quot;\n            AbsoluteLayout.LayoutFlags=&quot;PositionProportional&quot; BackgroundColor=&quot;#fff&quot;  HeightRequest=&quot;60&quot; WidthRequest=&quot;60&quot; CornerRadius=&quot;60&quot;   BackgroundGradientStartPoint=&quot;0,0&quot; BackgroundGradientEndPoint=&quot;1,0&quot;&gt;\n            &lt;pancakeview:PancakeView.Shadow&gt;\n                &lt;pancakeview:DropShadow Color=&quot;#000000&quot; Offset=&quot;10,10&quot;   \/&gt;\n            &lt;\/pancakeview:PancakeView.Shadow&gt;\n            &lt;pancakeview:PancakeView.GestureRecognizers&gt;\n                &lt;TapGestureRecognizer Command=&quot;{Binding TapCommand}&quot; NumberOfTapsRequired=&quot;2&quot;\/&gt;\n            &lt;\/pancakeview:PancakeView.GestureRecognizers&gt;\n            &lt;Image Source=&quot;add.png&quot; HeightRequest=&quot;33&quot; WidthRequest=&quot;33&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot;\/&gt;\n        &lt;\/pancakeview:PancakeView&gt;\n    &lt;\/AbsoluteLayout&gt;\n&lt;\/ContentPage&gt;<\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"AddPlacesPagexaml\">AddPlacesPage.xaml<\/span><\/h3>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">1<\/span> Projenizin <strong>Views <\/strong>klas\u00f6r\u00fcne AddPlacesPage.xaml ad\u0131nda bir ContentPage ekleyin. Bu sayfada olu\u015fturaca\u011f\u0131n\u0131z form ile veritaban\u0131na yeni yerler ekleyeceksiniz.<\/p>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">2<\/span> Ard\u0131ndan <strong>AddPlacesPage.xaml.cs<\/strong> s\u0131n\u0131f\u0131na gidin ve bu s\u0131n\u0131f\u0131n yap\u0131c\u0131 y\u00f6ntemine\u00a0BindingContext\u00a0nesnesi ile AddPlacesViewModel s\u0131n\u0131f\u0131n\u0131 ba\u011flay\u0131n. (<a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\" rel=\"noreferrer noopener\" target=\"_blank\">Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131<\/a>)<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public partial class AddPlacesPage : ContentPage\n{\n    public AddPlacesPage()\n    {\n        InitializeComponent();\n        BindingContext = new AddPlacesViewModel();\n    }\n}<\/code><\/pre>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">3<\/span> \u015eimdi AddPlacesPage.xaml sayfas\u0131n\u0131 a\u00e7\u0131n. Bu XAML sayfas\u0131nda yeni yerler eklemek i\u00e7in kullanaca\u011f\u0131n\u0131z bir form olu\u015fturun. <\/p>\n<p>Burada ben yine <a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-pancakeview-eklentisi-kullanimi\/\" rel=\"noreferrer noopener\" target=\"_blank\">PancakeView <\/a>ile g\u00f6r\u00fcn\u00fcmde \u00f6zelle\u015ftirmeler yapt\u0131m.<\/p>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"Xamarin.Forms SQLite Add Places ContentPage\" class=\"wp-image-254\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 237px) 100vw, 237px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Add-Places-ContentPage-473x1024.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Add-Places-ContentPage-473x1024.jpg 473w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Add-Places-ContentPage-709x1536.jpg 709w\" height=\"512\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"237\" \/><figcaption>Xamarin.Forms SQLite  Add Places ContentPage<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\n&lt;ContentPage xmlns=&quot;http:\/\/xamarin.com\/schemas\/2014\/forms&quot;\n             xmlns:x=&quot;http:\/\/schemas.microsoft.com\/winfx\/2009\/xaml&quot;\n             xmlns:d=&quot;http:\/\/xamarin.com\/schemas\/2014\/forms\/design&quot;\n             xmlns:mc=&quot;http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006&quot;\n             xmlns:pancakeview=&quot;clr-namespace:Xamarin.Forms.PancakeView;assembly=Xamarin.Forms.PancakeView&quot;\n             mc:Ignorable=&quot;d&quot;\n             x:Class=&quot;Weather.View.AddPlacesPage&quot;&gt;\n    &lt;StackLayout &gt;\n        &lt;Grid&gt;\n            &lt;Grid.RowDefinitions&gt;\n                &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n                &lt;RowDefinition Height=&quot;Auto&quot;\/&gt;\n            &lt;\/Grid.RowDefinitions&gt;\n            &lt;StackLayout Grid.Row=&quot;0&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;20,10,20,10&quot;  &gt;\n                &lt;Grid&gt;\n                    &lt;Grid.ColumnDefinitions&gt;\n                        &lt;ColumnDefinition Width=&quot;Auto&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;*&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;*&quot; \/&gt;\n                        &lt;ColumnDefinition Width=&quot;Auto&quot; \/&gt;\n                    &lt;\/Grid.ColumnDefinitions&gt;\n                    &lt;pancakeview:PancakeView Grid.Column=&quot;0&quot; WidthRequest=&quot;41&quot; HeightRequest=&quot;41&quot; CornerRadius=&quot;10&quot;  BackgroundColor=&quot;#FFF&quot;&gt;\n                        &lt;pancakeview:PancakeView.Shadow&gt;\n                            &lt;pancakeview:DropShadow Color=&quot;#000&quot;\/&gt;\n                        &lt;\/pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:PancakeView.GestureRecognizers&gt;\n                            &lt;TapGestureRecognizer Command=&quot;{Binding BackCommand}&quot;\/&gt;\n                        &lt;\/pancakeview:PancakeView.GestureRecognizers&gt;\n                        &lt;Image Source=&quot;back.png&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView&gt;\n                    &lt;pancakeview:PancakeView Grid.Column=&quot;3&quot; WidthRequest=&quot;41&quot; HeightRequest=&quot;41&quot; CornerRadius=&quot;10&quot; BackgroundColor=&quot;#FFF&quot;&gt;\n                        &lt;pancakeview:PancakeView.Shadow&gt;\n                            &lt;pancakeview:DropShadow Color=&quot;#000&quot;   \/&gt;\n                        &lt;\/pancakeview:PancakeView.Shadow&gt;\n                        &lt;Image Source=&quot;menu.png&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView&gt;\n                &lt;\/Grid&gt;\n            &lt;\/StackLayout&gt;\n            &lt;StackLayout Grid.Row=&quot;1&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; Margin=&quot;20,10,20,10&quot;  &gt;\n                &lt;pancakeview:PancakeView BackgroundColor=&quot;#deecfc&quot;  HeightRequest=&quot;50&quot; WidthRequest=&quot;350&quot; CornerRadius=&quot;5&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; BackgroundGradientStartPoint=&quot;0,0&quot; BackgroundGradientEndPoint=&quot;1,0&quot;&gt;\n                    &lt;Entry x:Name=&quot;cityName&quot; Placeholder=&quot;CityName&quot; HorizontalOptions=&quot;FillAndExpand&quot; Text=&quot;{Binding CityName}&quot;&gt;&lt;\/Entry&gt;\n                    &lt;pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:DropShadow Color=&quot;#000000&quot; Offset=&quot;10,10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView.Shadow&gt;\n                &lt;\/pancakeview:PancakeView&gt;\n                &lt;pancakeview:PancakeView BackgroundColor=&quot;#deecfc&quot; HeightRequest=&quot;50&quot; WidthRequest=&quot;350&quot; CornerRadius=&quot;5&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; BackgroundGradientStartPoint=&quot;0,0&quot; BackgroundGradientEndPoint=&quot;1,0&quot;&gt;\n                    &lt;Entry x:Name=&quot;cityKey&quot; Placeholder=&quot;CityKey&quot; HorizontalOptions=&quot;FillAndExpand&quot; Text=&quot;{Binding CityKey}&quot;&gt;&lt;\/Entry&gt;\n                    &lt;pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:DropShadow Color=&quot;#000000&quot; Offset=&quot;10,10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView.Shadow&gt;\n                &lt;\/pancakeview:PancakeView&gt;\n                &lt;pancakeview:PancakeView BackgroundColor=&quot;#deecfc&quot; HeightRequest=&quot;50&quot; WidthRequest=&quot;350&quot; CornerRadius=&quot;5&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; BackgroundGradientStartPoint=&quot;0,0&quot; BackgroundGradientEndPoint=&quot;1,0&quot;&gt;\n                    &lt;Entry x:Name=&quot;cityLat&quot; Placeholder=&quot;CityLat&quot; HorizontalOptions=&quot;FillAndExpand&quot; Text=&quot;{Binding CityLat}&quot;&gt;&lt;\/Entry&gt;\n                    &lt;pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:DropShadow Color=&quot;#000000&quot; Offset=&quot;10,10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView.Shadow&gt;\n                &lt;\/pancakeview:PancakeView&gt;\n                &lt;pancakeview:PancakeView BackgroundColor=&quot;#deecfc&quot; HeightRequest=&quot;50&quot; WidthRequest=&quot;350&quot; CornerRadius=&quot;5&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; BackgroundGradientStartPoint=&quot;0,0&quot; BackgroundGradientEndPoint=&quot;1,0&quot;&gt;\n                    &lt;Entry x:Name=&quot;cityLon&quot; Placeholder=&quot;CityLon&quot; HorizontalOptions=&quot;FillAndExpand&quot; Text=&quot;{Binding CityLon}&quot;&gt;&lt;\/Entry&gt;\n                    &lt;pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:DropShadow Color=&quot;#000000&quot; Offset=&quot;10,10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView.Shadow&gt;\n                &lt;\/pancakeview:PancakeView&gt;\n                &lt;pancakeview:PancakeView BackgroundColor=&quot;#87a8d0&quot; HeightRequest=&quot;50&quot; WidthRequest=&quot;350&quot; CornerRadius=&quot;10&quot; HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;Center&quot; BackgroundGradientStartPoint=&quot;0,0&quot; BackgroundGradientEndPoint=&quot;1,0&quot;&gt;\n                    &lt;Label Text=&quot;SAVE&quot; FontSize=&quot;Large&quot; FontAttributes=&quot;Bold&quot; HorizontalTextAlignment=&quot;Center&quot; VerticalTextAlignment=&quot;Center&quot;\/&gt;\n                    &lt;pancakeview:PancakeView.GestureRecognizers&gt;\n                        &lt;TapGestureRecognizer Command=&quot;{Binding TapCommand}&quot;\/&gt;\n                    &lt;\/pancakeview:PancakeView.GestureRecognizers&gt;\n                    &lt;pancakeview:PancakeView.BackgroundGradientStops&gt;\n                        &lt;pancakeview:GradientStopCollection&gt;\n                            &lt;pancakeview:GradientStop Color=&quot;#87a8d0&quot; Offset=&quot;0&quot; \/&gt;\n                            &lt;pancakeview:GradientStop Color=&quot;#b9ceeb&quot; Offset=&quot;1&quot; \/&gt;\n                        &lt;\/pancakeview:GradientStopCollection&gt;\n                    &lt;\/pancakeview:PancakeView.BackgroundGradientStops&gt;\n                    &lt;pancakeview:PancakeView.Shadow&gt;\n                        &lt;pancakeview:DropShadow Color=&quot;#87a8d0&quot; Offset=&quot;10,10&quot; \/&gt;\n                    &lt;\/pancakeview:PancakeView.Shadow&gt;\n                &lt;\/pancakeview:PancakeView&gt;\n            &lt;\/StackLayout&gt;\n        &lt;\/Grid&gt;\n    &lt;\/StackLayout&gt;\n&lt;\/ContentPage&gt;<\/code><\/pre>\n<p>T\u00fcm ad\u0131mlar\u0131 tamamlad\u0131ktan sonra uygulamay\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n ve nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcne bak\u0131n.<\/p>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"Xamarin.Forms SQLite Places Content Page\" class=\"wp-image-253\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 237px) 100vw, 237px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Places-Content-Page-473x1024.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Places-Content-Page-473x1024.jpg 473w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Places-Content-Page-709x1536.jpg 709w\" height=\"512\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"237\" \/><figcaption>PlacesPage.xaml<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"Xamarin.Forms SQLite  Add Places ContentPage\" class=\"wp-image-254\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 237px) 100vw, 237px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Add-Places-ContentPage-473x1024.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Add-Places-ContentPage-473x1024.jpg 473w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-Add-Places-ContentPage-709x1536.jpg 709w\" height=\"512\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"237\" \/><figcaption>AddPlacesPage.xaml<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"Xamarin.Forms CollectionView Floating Action Button\" class=\"wp-image-251\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 237px) 100vw, 237px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-CollectionView-Floating-Action-Button-473x1024.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-CollectionView-Floating-Action-Button-473x1024.jpg 473w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-CollectionView-Floating-Action-Button-709x1536.jpg 709w\" height=\"512\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"237\" \/><figcaption>Added Places<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- AI CONTENT END 1 -->\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda Xamarin.Forms ile daha \u00f6nceden geli\u015ftirdi\u011fim Hava Durumu uygulamas\u0131na SQLite ile yerel veritaban\u0131 ekleyece\u011fim. 1) Xamarin.Forms projenize SQLite eklentisini y\u00fckleyin \u00d6ncelikle, Xamarin.Forms projenizde SQLite <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","footnotes":""},"categories":[575],"tags":[576,577,578,579,580,581,574,42,570,582,19,28,4,15,5],"class_list":["post-5010","post","type-post","status-publish","format-standard","hentry","category-turkish","tag-net-maui","tag-algoritma","tag-dependencyservice","tag-giris-ekrani","tag-kaynak-sozlukleri","tag-malzeme-temasi","tag-monkeycache","tag-mvvm","tag-nuget","tag-onboarding-screen","tag-sqlite","tag-syncfusion","tag-xamarin","tag-xamarin-android","tag-xamarin-forms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService - Serkan Seker TR<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService - Serkan Seker TR\" \/>\n<meta property=\"og:description\" content=\"Bu yaz\u0131mda Xamarin.Forms ile daha \u00f6nceden geli\u015ftirdi\u011fim Hava Durumu uygulamas\u0131na SQLite ile yerel veritaban\u0131 ekleyece\u011fim. 1) Xamarin.Forms projenize SQLite eklentisini y\u00fckleyin \u00d6ncelikle, Xamarin.Forms projenizde SQLite\" \/>\n<meta property=\"og:url\" content=\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Serkan Seker TR\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-01T10:12:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg\" \/>\n<meta name=\"author\" content=\"serkanadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"serkanadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/\"},\"author\":{\"name\":\"serkanadmin\",\"@id\":\"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5\"},\"headline\":\"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService\",\"datePublished\":\"2021-02-01T10:12:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/\"},\"wordCount\":857,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg\",\"keywords\":[\".net maui\",\"algoritma\",\"DependencyService\",\"giri\u015f ekran\u0131\",\"kaynak s\u00f6zl\u00fckleri\",\"malzeme temas\u0131\",\"MonkeyCache\",\"MVVM\",\"NuGet\",\"onboarding screen\",\"sqlite\",\"syncfusion\",\"xamarin\",\"xamarin.android\",\"xamarin.forms\"],\"articleSection\":[\"Turkish\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/\",\"url\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/\",\"name\":\"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService - Serkan Seker TR\",\"isPartOf\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg\",\"datePublished\":\"2021-02-01T10:12:34+00:00\",\"author\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5\"},\"breadcrumb\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage\",\"url\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg\",\"contentUrl\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/serkanseker.com\/tr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/serkanseker.com\/tr\/#website\",\"url\":\"https:\/\/serkanseker.com\/tr\/\",\"name\":\"Serkan Seker TR\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/serkanseker.com\/tr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5\",\"name\":\"serkanadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/93ddc1f96117bf468976afe93a077eda77de96bcdb48dc749903598a546786a3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/93ddc1f96117bf468976afe93a077eda77de96bcdb48dc749903598a546786a3?s=96&d=mm&r=g\",\"caption\":\"serkanadmin\"},\"sameAs\":[\"https:\/\/serkanseker.com\"],\"url\":\"https:\/\/serkanseker.com\/tr\/author\/serkanadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService - Serkan Seker TR","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService - Serkan Seker TR","og_description":"Bu yaz\u0131mda Xamarin.Forms ile daha \u00f6nceden geli\u015ftirdi\u011fim Hava Durumu uygulamas\u0131na SQLite ile yerel veritaban\u0131 ekleyece\u011fim. 1) Xamarin.Forms projenize SQLite eklentisini y\u00fckleyin \u00d6ncelikle, Xamarin.Forms projenizde SQLite","og_url":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/","og_site_name":"Serkan Seker TR","article_published_time":"2021-02-01T10:12:34+00:00","og_image":[{"url":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg","type":"","width":"","height":""}],"author":"serkanadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"serkanadmin","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#article","isPartOf":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/"},"author":{"name":"serkanadmin","@id":"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5"},"headline":"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService","datePublished":"2021-02-01T10:12:34+00:00","mainEntityOfPage":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/"},"wordCount":857,"commentCount":0,"image":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg","keywords":[".net maui","algoritma","DependencyService","giri\u015f ekran\u0131","kaynak s\u00f6zl\u00fckleri","malzeme temas\u0131","MonkeyCache","MVVM","NuGet","onboarding screen","sqlite","syncfusion","xamarin","xamarin.android","xamarin.forms"],"articleSection":["Turkish"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/","url":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/","name":"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService - Serkan Seker TR","isPartOf":{"@id":"https:\/\/serkanseker.com\/tr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage"},"image":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg","datePublished":"2021-02-01T10:12:34+00:00","author":{"@id":"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5"},"breadcrumb":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#primaryimage","url":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg","contentUrl":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/02\/Xamarin-Forms-SQLite-NuGet-Paketi.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-sqlite-kullanimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/serkanseker.com\/tr\/"},{"@type":"ListItem","position":2,"name":"Xamarin.Forms\u2019da SQLite Kullan\u0131m\u0131 | DependencyService"}]},{"@type":"WebSite","@id":"https:\/\/serkanseker.com\/tr\/#website","url":"https:\/\/serkanseker.com\/tr\/","name":"Serkan Seker TR","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/serkanseker.com\/tr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5","name":"serkanadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/93ddc1f96117bf468976afe93a077eda77de96bcdb48dc749903598a546786a3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/93ddc1f96117bf468976afe93a077eda77de96bcdb48dc749903598a546786a3?s=96&d=mm&r=g","caption":"serkanadmin"},"sameAs":["https:\/\/serkanseker.com"],"url":"https:\/\/serkanseker.com\/tr\/author\/serkanadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/posts\/5010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/comments?post=5010"}],"version-history":[{"count":0,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/posts\/5010\/revisions"}],"wp:attachment":[{"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/media?parent=5010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/categories?post=5010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/tags?post=5010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}