{"id":5005,"date":"2021-01-24T17:15:57","date_gmt":"2021-01-24T17:15:57","guid":{"rendered":"https:\/\/serkanseker.com\/?p=5005"},"modified":"2021-01-24T17:15:57","modified_gmt":"2021-01-24T17:15:57","slug":"xamarin-forms-veri-baglama-kavrami","status":"publish","type":"post","link":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/","title":{"rendered":"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131"},"content":{"rendered":"<div class=\"entry-content entry clearfix\">\n<p>Mobil uygulamalarda bazen g\u00f6r\u00fcn\u00fcmlerin ba\u011flant\u0131l\u0131 bir \u015fekilde hareket etti\u011fini veya bir UI \u00f6\u011fesinin dinamik olarak g\u00fcncellendi\u011fini g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr. Bu t\u00fcr etkile\u015fimler bir uygulaman\u0131n kullan\u0131c\u0131 deneyimini art\u0131ran fakt\u00f6rlerdendir. Buna benzer ba\u011flant\u0131lar\u0131 Xamarin.Forms uygulamalar\u0131nda Veri Ba\u011flama ile yapabilirsiniz.<\/p>\n<p>Veri ba\u011flamalar\u0131 Xamarin.Forms\u2019un en temel \u00f6zelliklerinden biridir. Uygulama ile kullan\u0131c\u0131n\u0131n aras\u0131nda bir k\u00f6pr\u00fc kurarak kar\u015f\u0131l\u0131kl\u0131 etkile\u015fim halinde olmas\u0131n\u0131 sa\u011flar.<\/p>\n<div class=\"schema-how-to wp-block-yoast-how-to-block\">\n<p class=\"schema-how-to-description\">\n<ol class=\"schema-how-to-steps\">\n<li class=\"schema-how-to-step\" id=\"how-to-step-1611507549596\"><strong class=\"schema-how-to-step-name\"><a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#veri-baglama-nedir\">Veri Ba\u011flama Nedir?<\/a><\/strong>\n<p class=\"schema-how-to-step-text\">\n<\/li>\n<li class=\"schema-how-to-step\" id=\"how-to-step-1611507561354\"><strong class=\"schema-how-to-step-name\"><a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#veri-baglama-modlari\">Veri Ba\u011flama Modlar\u0131<\/a><\/strong>\n<p class=\"schema-how-to-step-text\">\n<\/li>\n<li class=\"schema-how-to-step\" id=\"how-to-step-1611507570831\"><strong class=\"schema-how-to-step-name\"><a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#viewtoview-veri-baglama\">View-To-View Veri Ba\u011flama<\/a><\/strong>\n<p class=\"schema-how-to-step-text\">\n<\/li>\n<li class=\"schema-how-to-step\" id=\"how-to-step-1611507598824\"><strong class=\"schema-how-to-step-name\"><a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#observablecollection-listview-baglama\">ObservableCollection ile ListView\u2019e Veri Ba\u011flama<\/a><\/strong>\n<p class=\"schema-how-to-step-text\">\n<\/li>\n<li class=\"schema-how-to-step\" id=\"how-to-step-1611507608536\"><strong class=\"schema-how-to-step-name\"><a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#veri-baglama-komut\">Veri Ba\u011flama\u2019da Komutlar<\/a><\/strong>\n<p class=\"schema-how-to-step-text\">\n<\/li>\n<\/ol>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"veri-baglama-nedir\"><span id=\"Veri_Baglama_Nedir\">Veri Ba\u011flama Nedir?<\/span><\/h2>\n<p><strong>Data Bindings<\/strong> (Veri Ba\u011flamalar\u0131), Xamarin.Forms uygulamalar\u0131nda g\u00f6r\u00fcn\u00fcmler ile kaynaklar\u0131 ya da g\u00f6r\u00fcn\u00fcmler ile g\u00f6r\u00fcn\u00fcmleri birbirine ba\u011flamak i\u00e7in kullan\u0131l\u0131r. Ba\u011flanma i\u015fleminden sonra verilerde de\u011fi\u015fiklik meydana geldi\u011finde g\u00f6r\u00fcn\u00fcmler de\u011fi\u015fir. Ya da tam tersi g\u00f6r\u00fcn\u00fcm de\u011fi\u015fti\u011finde veriler de de\u011fi\u015fir.<\/p>\n<p>\u00d6rne\u011fin,<\/p>\n<ul class=\"wp-block-list\">\n<li>ContentPage i\u00e7erisinde tan\u0131ml\u0131 bir Slider ve BoxView oldu\u011funu varsayal\u0131m. Bu slideri BoxView\u2019a ba\u011flayabilir ve Slider\u2019i kayd\u0131rd\u0131\u011f\u0131n\u0131zda BoxView\u2019in opakl\u0131\u011f\u0131n\u0131 de\u011fi\u015ftirebilirsiniz. <\/li>\n<li>Ya da, ModelView s\u0131n\u0131f\u0131ndaki varolan bir Listeyi ListView\u2019a ba\u011flayabilir ve verileri bir listede g\u00f6r\u00fcnt\u00fcleyebilirsiniz. Hatta ViewModel s\u0131n\u0131f\u0131nda yazaca\u011f\u0131n\u0131z komutlar ile ListView \u00fczerinden bu verilerde de\u011fi\u015fiklik yapabilirsiniz.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" alt=\"Veri Ba\u011flama Kavramlar\u0131\" class=\"wp-image-79\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 500px) 100vw, 500px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg 500w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari-300x120.jpg 300w\" height=\"200\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"500\" \/><figcaption>Veri Ba\u011flama Kavramlar\u0131<\/figcaption><\/figure>\n<\/div>\n<p>Veri Ba\u011flamalar\u0131 temelde d\u00f6rt ana bile\u015fenden olu\u015fur ve her bir ba\u011f bu bile\u015fenleri i\u00e7erir:<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Hedef nesne<\/strong> (Target object)<\/li>\n<li><strong>Hedef \u00f6zellik<\/strong> (Target property)<\/li>\n<li><strong>Ba\u011flama kayna\u011f\u0131<\/strong> (Binding source)<\/li>\n<li><strong>Yol<\/strong> (Path)<\/li>\n<\/ol>\n<p>\u00d6rne\u011fin, Students adl\u0131 bir s\u0131n\u0131f\u0131n Students.Name \u00f6zelli\u011fini bir Label\u2019in Text \u00f6zelli\u011fine ba\u011flad\u0131\u011f\u0131m\u0131z\u0131 varsayal\u0131m. Bu durumda, hedef nesne Label, hedef \u00f6zellik Text \u00f6zelli\u011fidir, kullan\u0131lan de\u011fer Name ve kaynak Students nesnesidir.<\/p>\n<h2 class=\"wp-block-heading\" id=\"veri-baglama-modlari\"><span id=\"Veri_Baglama_Modlari\">Veri Ba\u011flama Modlar\u0131<\/span><\/h2>\n<p>Ba\u011flaman\u0131n yaln\u0131zca kaynaktan hedefe olmas\u0131 gerekmez. Ba\u011flama, uygulaman\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na ba\u011fl\u0131 olarak hedeften kayna\u011fa veya iki y\u00f6nl\u00fc olabilir. Kullan\u0131c\u0131n\u0131n uygulamadaki verileri de\u011fi\u015ftirmesini isteyip istemedi\u011fine g\u00f6re Ba\u011flama Modunun y\u00f6n\u00fc de\u011fi\u015fir. <\/p>\n<p>Geli\u015ftirdi\u011finiz projelerde veri ba\u011flama modlar\u0131n\u0131 do\u011fru bir \u015fekilde kulllan\u0131c\u0131 deneyimini art\u0131rabilirsiniz. Gerekti\u011finde bir kullan\u0131c\u0131ya hem veri g\u00f6stermeli hem de kullan\u0131c\u0131n\u0131n yapaca\u011f\u0131 i\u015flemlere g\u00f6re bu verileri g\u00fcncellemelisiniz. B\u00f6ylece kullan\u0131c\u0131yla veri al\u0131\u015fveri\u015fi yapan dinamik bir uygulama elde edersiniz.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" alt=\"Veri Ba\u011flamada Veri Ak\u0131\u015f\u0131\" class=\"wp-image-65\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 500px) 100vw, 500px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglamada-Veri-Akisi.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglamada-Veri-Akisi.jpg 500w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglamada-Veri-Akisi-300x120.jpg 300w\" height=\"200\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"500\" \/><figcaption>Veri Ba\u011flamada Veri Ak\u0131\u015f\u0131<\/figcaption><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\"><span id=\"1Tek_Yonlu_Baglama_OneWay_Binding\">1)Tek Y\u00f6nl\u00fc Ba\u011flama (OneWay Binding)<\/span><\/h3>\n<p><strong>OneWay <\/strong>ba\u011flama, kaynaktaki de\u011fi\u015fikliklerin hedef \u00f6zelli\u011fini g\u00fcnceller. Yani kaynakta bir de\u011fi\u015fiklik meydana geldi\u011finde hedef \u00f6zelli\u011fi de\u011fi\u015fir. Ancak hedefte yap\u0131lan de\u011fi\u015fiklikler kayna\u011f\u0131 g\u00fcncellemez. Salt okunur verileri ba\u011flamak i\u00e7in kullanmak daha uygundur. Hedefte de\u011fi\u015fiklik yap\u0131lmayaca\u011f\u0131 durumlarda TwoWay yerine OneWay\u2019e ba\u011flanmak gerekir. B\u00f6ylece uygulama daha az y\u00fck biner.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"2Iki_Yonlu_Baglama_TwoWay_Binding\">2)\u0130ki Y\u00f6nl\u00fc Ba\u011flama (TwoWay Binding)<\/span><\/h3>\n<p><strong>TwoWay <\/strong>ba\u011flama ile, kaynak veya hedefteki bir de\u011fi\u015fik di\u011ferini g\u00fcnceller. Kullan\u0131c\u0131 taraf\u0131ndan d\u00fczenlenebilir g\u00f6r\u00fcn\u00fcm kayna\u011fa ba\u011flanacaksa TwoWay ba\u011flama daha uygundur. CheckBox, RadioButton gibi UI bile\u015fenleri bu \u015fekilde ba\u011flanmal\u0131d\u0131r.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"3OneWayToSource_Baglama_OneWayToSource_Binding\">3)OneWayToSource Ba\u011flama (OneWayToSource Binding)<\/span><\/h3>\n<p>OneWay, ba\u011flaman\u0131n tersidir. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, hedefteki de\u011fi\u015fiklik kayna\u011f\u0131 g\u00fcnceller. <\/p>\n<h3 class=\"wp-block-heading\"><span id=\"4OneTime_Baglama_OneTime_Binding\">4)OneTime Ba\u011flama (OneTime Binding)<\/span><\/h3>\n<p>Kaynak de\u011ferinin de\u011fi\u015fmedi\u011fi durumlarda, yani verilerin statik oldu\u011fu durumlarda kullan\u0131lmas\u0131 uygundur. OneTime ba\u011flama, kayna\u011f\u0131n hedefi ba\u015flatmas\u0131na izin verir. Hedefte daha sonraki de\u011fi\u015fiklikleri yans\u0131tmaz. Yani bir kereliktir. Bu, basit bir OneWay ba\u011flama t\u00fcr\u00fcd\u00fcr.<\/p>\n<h2 class=\"wp-block-heading\" id=\"viewtoview-veri-baglama\"><span id=\"View_To_View_Veri_Baglama\">View To View Veri Ba\u011flama<\/span><\/h2>\n<p>Xamarin.Forms uygulamalar\u0131nda, bir g\u00f6r\u00fcn\u00fcm \u00f6\u011fesini ba\u015fka bir g\u00f6r\u00fcn\u00fcm \u00f6\u011fesine ba\u011flayabilirsiniz. B\u00f6ylece, bir g\u00f6r\u00fcn\u00fcmdeki de\u011fi\u015fiklik di\u011ferini g\u00fcnceller. View-to-view ba\u011flamada <a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-mvvm-model\/\" rel=\"noreferrer noopener\" target=\"_blank\">MVVM modelindeki<\/a> Model ve ViewModel s\u0131n\u0131flar\u0131na s\u0131n\u0131flar\u0131na gerek yoktur. View bile\u015fenlerini birbirine ba\u011flaman\u0131z yeterlidir.<\/p>\n<p>\u015eimdi g\u00f6sterece\u011fim \u00f6rnekte, BoxView ile Slider\u2019i birbirine ba\u011flay\u0131p de\u011fi\u015fiklikleri g\u00f6zlemleyece\u011fiz. Ayr\u0131ca, Slider\u2019e bir Label ba\u011flay\u0131p Text \u00f6zelli\u011fini Slider\u2019in de\u011ferine g\u00f6re de\u011fi\u015ftirece\u011fiz.<\/p>\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             x:Class=&quot;Blog.Views.BasicDataBindingPage&quot;&gt;\n    &lt;ContentPage.Content&gt;\n        &lt;StackLayout&gt;\n            &lt;Grid  HorizontalOptions=&quot;CenterAndExpand&quot; VerticalOptions=&quot;CenterAndExpand&quot;&gt;\n                &lt;Grid.RowDefinitions&gt;\n                    &lt;RowDefinition Height=&quot;*&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;Auto&quot; \/&gt;\n                &lt;\/Grid.ColumnDefinitions&gt;\n                &lt;BoxView x:Name=&quot;boxview&quot;\n                         BackgroundColor=&quot;Gray&quot;\n                         HeightRequest=&quot;200&quot;\n                         HorizontalOptions=&quot;Center&quot;\n                         VerticalOptions=&quot;CenterAndExpand&quot; \/&gt;\n                &lt;Slider x:Name=&quot;opacitySlider&quot;\n                        Grid.Row=&quot;1&quot; Grid.Column=&quot;0&quot;\n                        Maximum=&quot;1&quot;\n                        BindingContext=&quot;{x:Reference boxview}&quot;\n                        Value=&quot;{Binding Opacity, Mode=TwoWay}&quot;\n                        MaximumTrackColor=&quot;Gray&quot;\n                        MinimumTrackColor=&quot;Gray&quot;\/&gt;\n                &lt;Label BindingContext=&quot;{x:Reference opacitySlider}&quot;\n                       Text=&quot;{Binding Value, StringFormat=&#039;Scale = {0:F1}&#039;}&quot;\n                       Grid.Row=&quot;1&quot; Grid.Column=&quot;1&quot;\n                       VerticalTextAlignment=&quot;Center&quot;\/&gt;\n                &lt;Slider x:Name=&quot;rotationSlider&quot;\n                        Grid.Row=&quot;2&quot; Grid.Column=&quot;0&quot;\n                        Maximum=&quot;360&quot;\n                        BindingContext=&quot;{x:Reference boxview}&quot;\n                        Value=&quot;{Binding Rotation, Mode=OneWayToSource}&quot;\n                        MaximumTrackColor=&quot;Gray&quot;\n                        MinimumTrackColor=&quot;Gray&quot;\/&gt;\n                &lt;Label BindingContext=&quot;{x:Reference rotationSlider}&quot;\n                       Text=&quot;{Binding Value, StringFormat=&#039;Rotation = {0:F0}&#039;}&quot;\n                       Grid.Row=&quot;2&quot; Grid.Column=&quot;1&quot;\n                       VerticalTextAlignment=&quot;Center&quot;\n \/&gt;\n            &lt;\/Grid&gt;\n        &lt;\/StackLayout&gt;\n    &lt;\/ContentPage.Content&gt;\n&lt;\/ContentPage&gt;<\/code><\/pre>\n<p>Burada BoxView\u2019un <strong>x: Name<\/strong> de\u011ferini Slider\u2019\u0131n BindingContex de\u011ferine <strong>x: Reference<\/strong> ile ba\u011flad\u0131m. Ayr\u0131ca Slider\u2019\u0131n Value \u00f6zelli\u011fini BoxView\u2019\u0131n opakl\u0131\u011f\u0131na ba\u011flad\u0131m. Etikette, Slider\u2019\u0131 <strong>x: Reference<\/strong> ile ba\u011flad\u0131m ve Text \u00f6zelli\u011finin de\u011ferini StringFormat ile yazd\u0131rd\u0131m.<\/p>\n<p><strong>x:Name<\/strong> de\u011feri opacitySlider olan Slider g\u00f6r\u00fcn\u00fcm\u00fcn\u00fcn ba\u011flama modu TwoWay\u2019dir. E\u011fer TwoWay yerine OneWayToSource modunda ba\u011flasayd\u0131m BoxView g\u00f6r\u00fcnmeyecekti. \u00c7\u00fcnk\u00fc BoxView\u2019in Opacity \u00f6zelli\u011finin ba\u015flang\u0131\u00e7 de\u011feri OneWayToSource modunda ba\u011flansayd\u0131 0 olacakt\u0131. Opacity \u00f6zelli\u011finin de\u011ferinin 0 yerine 1 olarak ayarlanmas\u0131n\u0131 istedi\u011fim i\u00e7in, mod TwoWay yerine OneWayToSource olarak ba\u011flad\u0131m. Bunlara dikkat edin.<\/p>\n<p>Ekran \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibi olur:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"ViewToView Veri Ba\u011flama\" class=\"wp-image-66\" data-lazyloaded=\"1\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/ViewToView-Veri-Baglama.gif\" height=\"640\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"295\" \/><figcaption>ViewToView Veri Ba\u011flama<\/figcaption><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"observablecollection-listview-baglama\"><span id=\"ObservableCollection_ile_ListView8217e_Veri_Baglama\">ObservableCollection ile ListView\u2019e Veri Ba\u011flama<\/span><\/h2>\n<p>\u00d6nceki \u00f6rnekte, bir g\u00f6r\u00fcn\u00fcm\u00fc ba\u015fka bir g\u00f6r\u00fcn\u00fcme ba\u011flad\u0131m. \u015eimdi ViewModel s\u0131n\u0131f\u0131nda tan\u0131mlanan bir ObservableCollection\u2019\u0131 ListView\u2019a nas\u0131l ba\u011flayaca\u011f\u0131m\u0131 g\u00f6sterece\u011fim. Verileri ListView\u2019a ba\u011flamak, Veri Ba\u011flamalar\u0131 konusunu daha iyi anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Zaten \u00e7o\u011fu uygulamada ListView yap\u0131s\u0131n\u0131 s\u0131kl\u0131kla kullanacaks\u0131n\u0131z.<\/p>\n<p>Bu \u00f6rnekte, \u00f6\u011frenci bilgilerini tutan bir ObservableCollection\u2019u ListView g\u00f6r\u00fcn\u00fcm\u00fcne ba\u011flayaca\u011f\u0131m. Dolay\u0131s\u0131yla \u00f6\u011frencileri modelleyen bir Model s\u0131n\u0131f\u0131na ve bu modele g\u00f6re ObservableCollection olu\u015fturaca\u011f\u0131m bir ViewModel s\u0131n\u0131f\u0131na ihtiyac\u0131m var. B\u00f6ylece projeye <a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-mvvm-model\/\" rel=\"noreferrer noopener\" target=\"_blank\">MVVM modelini<\/a> uygulam\u0131\u015f olaca\u011f\u0131m. MVVM modeli ile geli\u015ftirilen projelerin katmanlar\u0131 birbirinden ayr\u0131 geli\u015ftirildi\u011fi i\u00e7in Seperation of Concers prensibini tam olarak uygulamaktad\u0131r. Bu nedenle Xamarin.Forms ile geli\u015ftirece\u011finiz uygulamalarda MVVM modelini kullanman\u0131z\u0131 tavsiye ederim.<\/p>\n<p>\u015eimdi a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 s\u0131rayla uygulay\u0131n.<\/p>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">1<\/span> \u00d6nce projeye bir <strong>Model <\/strong>klas\u00f6r\u00fc ekleyin. Ard\u0131ndan bu klas\u00f6r\u00fcn i\u00e7inde Students adl\u0131 bir s\u0131n\u0131f olu\u015fturun. Bu s\u0131n\u0131fta basit\u00e7e Number, Name, Surname\u00a0de\u011fi\u015fkenleri olu\u015fturun.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">public class Student\n{\n    public int Number { get; set; }\n    public string Name { get; set; }\n    public string Surname { get; set; }\n}<\/code><\/pre>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">2<\/span> Daha sonra projeye <strong>ViewModels <\/strong>adl\u0131 bir klas\u00f6r ekleyin ve bu klas\u00f6rde StudentViewModel adl\u0131 bir s\u0131n\u0131f olu\u015fturun. MVVM modelinde ViewModel, View ve Model aras\u0131nda ba\u011flant\u0131 sa\u011flar. Yani bu \u00f6rnekte StudentViewModel, Model s\u0131n\u0131f\u0131 ile View aras\u0131nda bir k\u00f6pr\u00fc g\u00f6revi yapacak. Ard\u0131ndan verilerin i\u015flendi\u011fi bir ObservableCollection koleksiyonu olu\u015fturun.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">    public class StudentViewModel\n    {\n        private ObservableCollection&lt;Student&gt; studentList;\n        public ObservableCollection&lt;Student&gt; StudentList\n        {\n            get { return studentList; }\n            set\n            {\n                studentList = value;\n            }\n        }\n        public StudentViewModel()\n        {\n            StudentList=GetStudents();\n        }\n        private ObservableCollection&lt;Student&gt; GetStudents()\n        {\n            return new ObservableCollection&lt;Student&gt;\n            {\n                new Student{Number=1, Name=&quot;Alex&quot;,Surname=&quot;Doe&quot;},\n                new Student{Number=2, Name=&quot;Susan&quot;,Surname=&quot;Cox&quot;},\n                new Student{Number=3, Name=&quot;Natalia&quot;,Surname=&quot;Weston&quot;},\n                new Student{Number=4, Name=&quot;David&quot;,Surname=&quot;Hahn&quot;}\n            };\n        }\n    }<\/code><\/pre>\n<p><span class=\"ugb-highlight\" style=\"color: var(--nv-primary-accent);background-color: var(--nv-light-bg)\">3<\/span> Son olarak, projeye <strong>Views <\/strong>adl\u0131 bir klas\u00f6r ekleyin ve bu klas\u00f6r i\u00e7inde StudentPage adl\u0131 bir ContentPage olu\u015fturun. Ard\u0131ndan, ContenPage\u2019in BindingContext\u2019ini a\u015fa\u011f\u0131daki gibi bildirin. <\/p>\n<p>Sonra BindingContex ile View\u2019a ViewModel\u2019i ba\u011flay\u0131n. Yani StudentPage g\u00f6r\u00fcn\u00fcm\u00fcne StudentViewModel s\u0131n\u0131f\u0131n\u0131 ba\u011flay\u0131n. Tabi ki gerekli namespace\u2019yi ContentPage tan\u0131m\u0131na eklemeniz gerekiyor. Eklemezseniz zaten uyar\u0131 alacaks\u0131n\u0131z. <\/p>\n<p>Ard\u0131ndan StackLayout i\u00e7erisine bir ListView ekleyin ve ItemSource \u00f6zelli\u011fini StudentList\u2019e ba\u011flay\u0131n. B\u00f6ylece, ListView kayna\u011f\u0131n\u0131n ViewModel s\u0131n\u0131f\u0131n\u0131n StudentList adl\u0131 ObservableCollection koleksiyonu oldu\u011funu beyan edersiniz. Ek olarak, StudentList\u2019in \u00f6zelliklerini ba\u011flayarak ViewCell\u2019deki Etiketlerin Text \u00f6zelliklerinin ListView\u2019de g\u00f6r\u00fcnmesini sa\u011flay\u0131n.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\">&lt;\/ContentPage&gt;\n   &lt;ContentPage.BindingContext&gt;\n        &lt;bc:StudentViewModel\/&gt;\n    &lt;\/ContentPage.BindingContext&gt;\n    &lt;ContentPage.Content&gt;\n        &lt;StackLayout&gt;\n            &lt;ListView ItemsSource=&quot;{Binding StudentList}&quot;&gt;\n                &lt;ListView.ItemTemplate&gt;\n                    &lt;DataTemplate&gt;\n                        &lt;ViewCell&gt;\n                            &lt;StackLayout Orientation=&quot;Horizontal&quot;&gt;\n                                &lt;Label Text=&quot;{Binding Number}&quot; FontSize=&quot;20&quot; FontAttributes=&quot;Bold&quot; TextColor=&quot;Gray&quot; \/&gt;\n                                &lt;Label Text=&quot;{Binding Name}&quot; FontSize=&quot;20&quot; \/&gt;\n                                &lt;Label Text=&quot;{Binding Surname}&quot; FontSize=&quot;20&quot; \/&gt;\n                            &lt;\/StackLayout&gt;\n                        &lt;\/ViewCell&gt;\n                    &lt;\/DataTemplate&gt;\n                &lt;\/ListView.ItemTemplate&gt;\n            &lt;\/ListView&gt;\n        &lt;\/StackLayout&gt;\n    &lt;\/ContentPage.Content&gt;\n&lt;\/ContentPage&gt;<\/code><\/pre>\n<p>Ekran \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibi olur:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"ObservableCollection'u ListView'a Ba\u011flama\" class=\"wp-image-67\" data-lazyloaded=\"1\" data-sizes=\"(max-width: 237px) 100vw, 237px\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/ListView-ObservableCollection-Baglama-473x1024.jpg\" data-srcset=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/ListView-ObservableCollection-Baglama-473x1024.jpg 473w, https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/ListView-ObservableCollection-Baglama-709x1536.jpg 709w\" height=\"512\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"237\" \/><figcaption>ObservableCollection\u2019u ListView\u2019a Ba\u011flama<\/figcaption><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"veri-baglama-komut\"><span id=\"Veri_Baglama8217da_Komutlar\">Veri Ba\u011flama\u2019da Komutlar<\/span><\/h2>\n<p>Xamarin.Forms uygulamalar\u0131nda Button, ImageView, Label gibi view bile\u015fenleri ile birka\u00e7 yoldan etkile\u015fin kurmak m\u00fcmk\u00fcn. \u00d6rne\u011fin xaml taraf\u0131nda bir butona Click eventi vermek ve xaml.cs tarafta da bu methodu yazmak. B\u00f6ylece butona her t\u0131kland\u0131\u011f\u0131nda bu method \u00e7al\u0131\u015f\u0131r.<\/p>\n<p> Ancak, <a href=\"https:\/\/www.serkanseker.com\/tr\/xamarin-forms-mvvm-model\/\" rel=\"noreferrer noopener\" target=\"_blank\">MVVM modelinde<\/a> Clicked i\u015fleyicisi(handler) olmad\u0131\u011f\u0131ndan, etkile\u015fimler Command arabirimi ile sa\u011flan\u0131r. Yani ViewModel s\u0131n\u0131f\u0131nda komut nesneleri tan\u0131mlan\u0131r ve bu komutlar View\u2019daki g\u00f6r\u00fcn\u00fcmlere ba\u011flan\u0131r. <\/p>\n<p>Yukar\u0131daki StudentList \u00f6rne\u011fimde Command aray\u00fcz\u00fc \u00fczerinden etkile\u015fim kurmak ve listedeki son \u00f6\u011feyi silmek istiyorum. Bunun i\u00e7in, StudentViewModel s\u0131n\u0131f\u0131nda biraz de\u011fi\u015fiklik yapaca\u011f\u0131m. <\/p>\n<p>\u00d6nce ViewModel s\u0131n\u0131f\u0131n\u0131 INotifyPropertyChanged aray\u00fcz\u00fcnden devral\u0131yorum. Ard\u0131ndan bu aray\u00fcz\u00fcn methodlar\u0131n\u0131 implement ediyorum. Daha sonra StudentList i\u00e7erisine OnPropertyChanged ekliyorum. OnPropertyChanged (\u201cStudent\u201d) methodu ile StudentList\u2019de de\u011fi\u015fiklik oldu\u011funda g\u00f6r\u00fcn\u00fcme haber veriyorum. B\u00f6ylece, bir \u00f6\u011fe silindi\u011finde ListView bile\u015feni g\u00fcncellenecek.<\/p>\n<p>Ayr\u0131ca Command\u2019\u0131 nas\u0131l kulland\u0131\u011f\u0131ma dikkat edin. ViewModel\u2019e bir komut eklemek ve komut y\u00f6ntemini tan\u0131mlamak i\u00e7in ICommand aray\u00fcz\u00fcn\u00fc kullan\u0131yorum. \u015eimdi bu komutu View\u2019a nas\u0131l ba\u011flad\u0131\u011f\u0131m\u0131 g\u00f6relim.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-csharp\">   public class StudentViewModel : INotifyPropertyChanged\n    {\n        public event PropertyChangedEventHandler PropertyChanged;\n        protected void OnPropertyChanged(string propertyName)\n        {\n            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n        }\n        private ObservableCollection&lt;Student&gt; studentList;\n        public ObservableCollection&lt;Student&gt; StudentList\n        {\n            get { return studentList; }\n            set\n            {\n                studentList = value;\n                OnPropertyChanged(&quot;Student&quot;);\n            }\n        }\n        public StudentViewModel()\n        {\n            StudentList = GetStudents();\n        }\n        private ObservableCollection&lt;Student&gt; GetStudents()\n        {\n            return new ObservableCollection&lt;Student&gt;\n            {\n                new Student{Number=1, Name=&quot;Alex&quot;,Surname=&quot;Doe&quot;},\n                new Student{Number=2, Name=&quot;Susan&quot;,Surname=&quot;Cox&quot;},\n                new Student{Number=3, Name=&quot;Natalia&quot;,Surname=&quot;Weston&quot;},\n                new Student{Number=4, Name=&quot;David&quot;,Surname=&quot;Hahn&quot;}\n            };\n        }\n        public ICommand DeleteCommand =&gt; new Command(Delete);\n        private async void Delete()\n        {\n            StudentList.RemoveAt(StudentList.Count-1);\n        }\n    }<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekteki ContentView i\u00e7erisine bir Buton ekledim ve Command \u00f6zelli\u011fini ViewModel\u2019de tan\u0131mlad\u0131\u011f\u0131m DeleteCommand ile ba\u011flad\u0131m. Hepsi bu. \u015eimdi, butona her t\u0131klad\u0131\u011f\u0131m\u0131zda, \u00d6\u011frenciListesinin son eleman\u0131 silinecek ve ListView g\u00fcncellenecektir.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\">    &lt;ContentPage.BindingContext&gt;\n        &lt;bc:StudentViewModel\/&gt;\n    &lt;\/ContentPage.BindingContext&gt;\n    &lt;ContentPage.Content&gt;\n        &lt;StackLayout&gt;\n            &lt;ListView ItemsSource=&quot;{Binding StudentList}&quot;&gt;\n                &lt;ListView.ItemTemplate&gt;\n                    &lt;DataTemplate&gt;\n                        &lt;ViewCell&gt;\n                            &lt;StackLayout Orientation=&quot;Horizontal&quot;&gt;\n                                &lt;Label Text=&quot;{Binding Number}&quot; FontSize=&quot;20&quot; FontAttributes=&quot;Bold&quot; TextColor=&quot;Gray&quot; \/&gt;\n                                &lt;Label Text=&quot;{Binding Name}&quot; FontSize=&quot;20&quot; \/&gt;\n                                &lt;Label Text=&quot;{Binding Surname}&quot; FontSize=&quot;20&quot; \/&gt;\n                            &lt;\/StackLayout&gt;\n                        &lt;\/ViewCell&gt;\n                    &lt;\/DataTemplate&gt;\n                &lt;\/ListView.ItemTemplate&gt;\n            &lt;\/ListView&gt;\n            &lt;Button Text=&quot;DELETE LAST ITEM&quot; Command=&quot;{Binding DeleteCommand}&quot;\/&gt;\n        &lt;\/StackLayout&gt;\n    &lt;\/ContentPage.Content&gt;<\/code><\/pre>\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" alt=\"Veri Baglamada Komutlar\" class=\"wp-image-69\" data-lazyloaded=\"1\" data-src=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Komutlar.gif\" height=\"640\" src=\"image\/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=\" width=\"295\" \/><figcaption>Veri Baglamada Komutlar<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\"><span id=\"Ozet\">\u00d6zet<\/span><\/h2>\n<p>\u00d6zet olarak, veri ba\u011flamalar\u0131 Xamarin.Forms\u2019un en temel \u00f6zelliklerinden biridir. Veri ba\u011flamalar\u0131 ile kaynaktaki veri ile hedefteki g\u00f6r\u00fcn\u00fcm birbirine ba\u011flanarak kullan\u0131c\u0131yla uygulama aras\u0131ndaki etkile\u015fim art\u0131r\u0131l\u0131r. Dolay\u0131s\u0131yla uygulaman\u0131n kullan\u0131c\u0131 deneyimi de artar.<\/p>\n<p>Bu makalede veri ba\u011flaman\u0131n temellerini ve veri ba\u011flama modlar\u0131n\u0131 anlatt\u0131m. Ayr\u0131ca \u00e7e\u015fitli \u00f6rneklerle konuyu peki\u015ftirmeye \u00e7al\u0131\u015ft\u0131m. Umar\u0131m faydal\u0131 olmu\u015ftur.<\/p>\n<p><!-- AI CONTENT END 1 -->\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Mobil uygulamalarda bazen g\u00f6r\u00fcn\u00fcmlerin ba\u011flant\u0131l\u0131 bir \u015fekilde hareket etti\u011fini veya bir UI \u00f6\u011fesinin dinamik olarak g\u00fcncellendi\u011fini g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr. Bu t\u00fcr etkile\u015fimler bir uygulaman\u0131n kullan\u0131c\u0131 deneyimini art\u0131ran fakt\u00f6rle<\/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-5005","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 Temel Veri Ba\u011flama Kavram\u0131 - 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 Temel Veri Ba\u011flama Kavram\u0131 - Serkan Seker TR\" \/>\n<meta property=\"og:description\" content=\"Mobil uygulamalarda bazen g\u00f6r\u00fcn\u00fcmlerin ba\u011flant\u0131l\u0131 bir \u015fekilde hareket etti\u011fini veya bir UI \u00f6\u011fesinin dinamik olarak g\u00fcncellendi\u011fini g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr. Bu t\u00fcr etkile\u015fimler bir uygulaman\u0131n kullan\u0131c\u0131 deneyimini art\u0131ran fakt\u00f6rle\" \/>\n<meta property=\"og:url\" content=\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\" \/>\n<meta property=\"og:site_name\" content=\"Serkan Seker TR\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-24T17:15:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.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=\"11 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-veri-baglama-kavrami\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\"},\"author\":{\"name\":\"serkanadmin\",\"@id\":\"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5\"},\"headline\":\"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131\",\"datePublished\":\"2021-01-24T17:15:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\"},\"wordCount\":1687,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.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-veri-baglama-kavrami\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\",\"url\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\",\"name\":\"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131 - Serkan Seker TR\",\"isPartOf\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg\",\"datePublished\":\"2021-01-24T17:15:57+00:00\",\"author\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5\"},\"breadcrumb\":{\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage\",\"url\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg\",\"contentUrl\":\"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/serkanseker.com\/tr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131\"}]},{\"@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 Temel Veri Ba\u011flama Kavram\u0131 - 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 Temel Veri Ba\u011flama Kavram\u0131 - Serkan Seker TR","og_description":"Mobil uygulamalarda bazen g\u00f6r\u00fcn\u00fcmlerin ba\u011flant\u0131l\u0131 bir \u015fekilde hareket etti\u011fini veya bir UI \u00f6\u011fesinin dinamik olarak g\u00fcncellendi\u011fini g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr. Bu t\u00fcr etkile\u015fimler bir uygulaman\u0131n kullan\u0131c\u0131 deneyimini art\u0131ran fakt\u00f6rle","og_url":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/","og_site_name":"Serkan Seker TR","article_published_time":"2021-01-24T17:15:57+00:00","og_image":[{"url":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg","type":"","width":"","height":""}],"author":"serkanadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"serkanadmin","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#article","isPartOf":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/"},"author":{"name":"serkanadmin","@id":"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5"},"headline":"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131","datePublished":"2021-01-24T17:15:57+00:00","mainEntityOfPage":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/"},"wordCount":1687,"commentCount":0,"image":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage"},"thumbnailUrl":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.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-veri-baglama-kavrami\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/","url":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/","name":"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131 - Serkan Seker TR","isPartOf":{"@id":"https:\/\/serkanseker.com\/tr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage"},"image":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage"},"thumbnailUrl":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg","datePublished":"2021-01-24T17:15:57+00:00","author":{"@id":"https:\/\/serkanseker.com\/tr\/#\/schema\/person\/841fcc69b248e08e52c4190963caeaf5"},"breadcrumb":{"@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#primaryimage","url":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg","contentUrl":"https:\/\/www.serkanseker.com\/tr\/wp-content\/uploads\/2021\/01\/Veri-Baglama-Kavramlari.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/serkanseker.com\/tr\/xamarin-forms-veri-baglama-kavrami\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/serkanseker.com\/tr\/"},{"@type":"ListItem","position":2,"name":"Xamarin.Forms\u2019da Temel Veri Ba\u011flama Kavram\u0131"}]},{"@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\/5005","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=5005"}],"version-history":[{"count":0,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/posts\/5005\/revisions"}],"wp:attachment":[{"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/media?parent=5005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/categories?post=5005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serkanseker.com\/tr\/wp-json\/wp\/v2\/tags?post=5005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}