جستجو در تالار

در حال نمایش نتایج برای برچسب های 'xamarin'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالار ها

  • عمومی
    • اطلاعیه
    • اخبار
    • پیشنهادها و انتقادات
    • درخواست آموزش
    • مشکلات و مسائل انجمن
    • متفرقه
  • سوالات، مشکلات و درخواست
    • ویندوز استور
    • وب (ASP.Net)
    • ویندوز دسکتاپ (Win32 & WPF)
    • زامارین فرم (Xamarin.Forms)
    • زامارین اندروید
    • زامارین iOS
    • دات نت کور
    • اینترنت اشیاء (IOT)
    • سوالات کلی و عمومی
  • توسعه نرم افزارهای ویندوز استور
    • سوالات، مشکلات پروژه های ویندوز استور
    • مقالات، کتاب ها و منابع آموزشی
    • سورس کدهای آموزشی
  • برنامه نویسی زامارین
    • زامارین فرم (Xamarin.Forms)
    • زامارین ios
    • زامارین اندروید
    • عمومی
  • برنامه نویسی ASP.NET
    • مقالات، کتاب ها و منابع آموزشی
    • .Net Core
    • ASP.NET MVC
    • ASP.NET WebForm
  • اینترنت اشیاء
    • مقالات، کتاب ها و منابع آموزشی
    • سخت افزار
    • نرم افزار
    • پروژه ها
  • متفرقه
    • آموزش ابزارها و نرم افزار ها
    • آموزش های سرویس ها و سایت ها
    • سوالات و مشکلات برنامه نویسی Win 32
  • نرم افزار
    • نرم افزار های تیم انجمن
    • نرم افزار های ساخت شما
    • سفارش نرم افزار و برنامه نویسی
    • معرفی ابزارها و نرم افزارهای مرتبط
    • درخواست ابزار کمکی
    • مشکلات و سوالات در مورد نرم افزار ها

گروه


آدرس تارنما


یاهو


اسکایپ


حساب مایکروسافت


شماره تماس


تلگرام


مکان


علایق


نام توسعه دهندگی

11 نتیجه پیدا شد

  1. سلام به وین نویسی های عزیز، امروز آموزش استفاده از دیتابیس SQlite در زامارین فرمز رو برای شما آماده کردم. این آموزش بر پایه دیتابیس آماده، درون پروژه می باشد. برای این آموزش نیاز هست که کتابخانه Sqlite-net-pcl رو در هر سه پروژه iOS,Android و UWP نصب کنید. نکته: همیشه ویژوال استودیو را با Run as Administrator باز کنید تا مشکلی برای شما در حین ساخت پروژه، بروز رسانی کتابخانه ها و... پیش نیاید. پروژه ای جدید از نوع Cross Platform App به نام WN XF Database ایجاد نمایید. (نکته: من اینجا اشتباها اومدم توی پوشه ی پروژه های ویژوال استودیو این پروژه رو ایجاد کردم. در اولین نگاه شاید بگید که این که اشکالی نداره، اما وقتی کار کنید میبیند که در پروژه اندروید هر کلاسی که اضافه میشه، عملا رنگ نوشته هاش سفید هست و کار نمیکنه که این به دلیل زیاد شدن آدرس پروژه هست، برای همین بهتر هست همیشه توی پوشه روت درایو هاتون پروژه ها رو بسازید یا حداقل درون یک پوشه درون پوشه روت درایو هاتون ایجاد کنید. من بعد از ساخت پروژه اون رو کات کردم توی درایو G پوشه Sources در کامپیوترم که این مشکل پیش نیاد.) در پنجره بعدی همانند تصویر عمل کنید، یعنی Template از نوع Blank App و UI technology از نوع Xamarin.Forms و Code Sharing strategy از نوع Shared باشه. سپس روی OK کلیک کنید، بعد از این از شما می خواد برای پروژه UWP نسخه SDK تعریف کنید که من 14393 که نسخه سالگرد هست رو انتخاب کردم. پس از ساخت پروژه، پنجره هایی که مربوط به IOS باز شدن رو ببندید. نکته: اگه با ناگت مشکل دارید، یعنی نمی توانید کتابخانه دانلود کنید، نرم افزار Fiddler4 رو دانلود و نصب کنید. پس از نصب آنرا باز کنید و روی WinConfig کلیک کنید، چنانچه از شما پیاپی سوال پرسیده شد، روی YES کلیک کنید تا پنجره ی دیگری برایتان باز شود. در پنجره باز شده روی Exempt all کلیک کنید و روی Save changes کلیک کنید و این پنجره را ببنید. از این پس هر زمانی که میخواهید از ناگت پکیج منیجر استفاده کنید، فقط برنامه Fiddler4 رو باز کنید. روی راه حل (Solution) راست کلیک کنید و روی Manage Nuget Packages for solution را انتخاب کنید. به تب Updates برید و در ابتدا Xamarin.Forms را بروز رسانی کنید، گزینه Xamarin.Forms را تیک بزنید و روی Update کلیک کنید. چنانچه بعد از نصب این قسمت زرد رنگ را دیدید روی Restart کلیک کنید تا ویژوال استودیو ریستارت شود. بعد از ریستارت بصورت خودکار پروژه شما بارگذاری خواهد شد. پس از باز شدن، دوباره به Nuget package manager را باز کنید و در تب Updates همه ی گزینه ها را تیک بزنید و روی Update کلیک کنید تا باقی کتابخانه ها هم بروز رسانی شوند. حال با تب Browse بروید و در قسمت Search این متن را تایپ کنید و اینتر بزنید: sqlite-net-pcl نکته: نسخه های متفاوتی از Sqlite در ناگت وجود دارد اما ما فقط و فقط این نسخه را می خواهیم: این کتابخانه را نصب کنید. نکته: این نسخه توسط Frank a Krueger ساخته شده و تنها نسخه ای هست که اندروید 7 به بالا بدون باگ اجرا میشود. نکته: حتما چک کنید و ببینید که این کتابخانه ها (SQLitePCLRaw) هم خودکار با این پکیج نصب شده باشند، اگر نصب نبودند حتما آنها را خودتان نصب کنیدالبته این عکس مربوط به References پروژه اندروید است. در UWP اینطوری نیست.) حال وقت آن است که دیتابیس را به پروژه اضافه کنیم، من از دیتابیسی که قبلا درون آموزش ساخت کتاب برای ویندوزفون 8.1 ساخته بودم اینجا استفاده کردم. کپی کردن دیتابیس در پروژه UWP. دیتابیس را درون روت پروژه UWP کپی کنید سپس روی آن راست کلیک کرده و روی Properties کلیک کنید. Build Action را روی Content قرار دهید و گزینه Copy to output directory را Copy Always قرار دهید کپی کردن دیتابیس درون پروژه IOS برای اضافه کردن فایل، باید آنها را در پوشه Resources پروژه IOS اضافه کنید. روی دیتابیس راست کلیک کنید و روی Properties کلیک کنید. حتما بررسی کنید که Build Action روی BundleResource و Copy to output روی Copy Always باشد: کپی کردن دیتابیس در پروژه Android در اندروید اضافه کردن فایل به پروژه بسیار جالب است. برای اضافه کردن فایل، ابتدا پوشه ای به نام Raw درون پوشه Resources ایجاد کنید و دیتابیس را درون آن اضافه کنید. روی دیتابیس راست کلیک کرده و Properties را انتخاب کنید و گزینه Build Action را روی AndroidResource و گزینه Copy to output را روی Copy Always قرار دهید. حالا چرا جالبه؟ الان بعد از اضافه کردن فایل به پوشه Raw که ایجاد کردیم، درون پروژه اندروید یک کلاس ایجاد به همین نام ایجاد شد و یک آیدی(شناسه) از نوع Integer برای این فایل ایجاد شد. مثلا برای دسترسی به این فایل درون پروژه اندروید بدین صورت عمل می کنیم: Resources.Raw.myBookDatabase حال شاید برایتان سوال پیش آید که چگونه قرار است این فایل ها را بخوانیم؟! ما باید در پروژه Shared یک اینترفیس interface ایجاد کنید و در هر پروژه به صورت جداگانه دیتابیس را بخوانیم. اینکار را ساخت Dependency می گویند. خب درون پروژه Shared ( پروژه اول درون Solution)، یک کلاس به نام IDatabaseService ایجاد نمایید: فضای نامی SQlite را به قسمت مربوطه اضافه کنید: using SQLite; خب حالا در تعریف کلاس، به جای کلمه class کلمه public interface را بنویسید. الان کدهای زیر را بنویسید: public interface IDatabaseService { SQLiteConnection GetConnection(string fileName); void CopyDatabaseToLocal(string fileName); } خب برای اونهایی که تا حالا با اینترفیس ها کار نکردن، ما اینجا یک تابع بازگشتی به نام GetConnection تعریف کردیم که SQLiteConnection رو باز گردانی خواهد کرد. تابع بعدی، تابع کپی کردن دیتابیس خواهد بود. ما در هر سه پروژه پلتفرم سه کلاس ایجاد خواهیم کرد که از این اینترفیس مشتق میشود. یک کلاس دیگر درون پروژه Shared به نام Extensions ایجاد کنید. این کلاس به صورت static خواهد بود و در واقع یک نوع Extension نویسی برای Exception ها است که قرار است ایجاد کنیم: static class Extensions { public static string Exception(this Exception ex, string starts) { var content = $"{starts} ex: {ex.Message}\r\nSource: {ex.Source}" + $"\r\nTrace: {ex.StackTrace}"; Output(content); return content; } public static void Output(object obj) { System.Diagnostics.Debug.WriteLine(Convert.ToString(obj)); } } تابع اول یک Extension است، تابع را در یک Exception که در try...catch قرار دارد فرا بخوانیم، اگر کد ما استثنا داد، خطا را در پنجره Output ویژوال نمایش خواهد داد(فقط در حالتی که پروژه روی Debug باشد.) خب در پروژه UWP یک کلاس به نام DatabaseService_UWP ایجاد کنید. فضاهای نامی زیر را به قسمت مربوطه اضافه کنید: using System; using SQLite; using Windows.Storage; using System.IO; using Xamarin.Forms; using Windows.ApplicationModel; حالا کلاس اینترفیس را مشتق کلاسی که ایجاد کردید قرار دهید، چنانچه موس را روی IDatabaseService ببرید و روی آن کلیک کنید یک مثلث زیر آن خواهد آمد که خودکار برای شما توابعی که در اینترفیس ایجاد کردیم را برای شما در این کلاس می سازد: تکه کد زیر را پاک کنید: throw new NotImplementedException(); حال کدهای زیر را درون تابع CopyDatabaseToLocal بنویسید: public async void CopyDatabaseToLocal(string fileName) { try { StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); // injori faghat yebar file ro copy mikonim tuye local folder storageFile = null; return; } catch { } StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync(fileName); await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); } دیتابیس درون پروژه را به LocalFolder کپی می کنیم. نکته: درون try...catch خط آخر return نوشتیم، اینطوری زمانی که هر بار برنامه باز می شود، اگر فایل دیتابیس درون LocalFolder موجود بود، آنرا کپی نخواهد کرد. این کار برای زمانی است که کاربر بخواهد دیتابیس را بروز رسانی کند و یا آیتمی به آن اضافه کند، اینطوری دیتابیس هر بار ریست نخواهد شد. حال تابع بازگشتی GetConnection را بنویسید: public SQLiteConnection GetConnection(string fileName) { try { var path = Path.Combine(ApplicationData.Current.LocalFolder.Path, fileName); var connection = new SQLiteConnection(path); return connection; } catch (Exception ex) { ex.Exception("DatabaseService_UWP"); } return null; } این تابع کانکشنی به دیتابیس باز می کند که ما بعد از متصل شدن، می توانیم آیتم ها را دریافت کنیم یا اینکه آنها را ویرایش و یا حذف کنیم. خب الان باید تعیین کنیم که این کلاس یک Dependency می باشد. برای اینکار، بالای فضای نامی کد زیر را بنویسید: [assembly: Dependency(typeof(WN_XF_Database.UWP.DatabaseService_UWP))] یعنی اینطوری: [assembly: Dependency(typeof(WN_XF_Database.UWP.DatabaseService_UWP))] namespace WN_XF_Database.UWP { public class DatabaseService_UWP : IDatabaseService حال درون پروژه IOS نیز یک کلاس به نام DatabaseService_IOS ایجاد نمایید. فضاهای نامی زیر را به قسمت مربوطه ی آن اضافه کنید: using SQLite; using System; using System.IO; using Xamarin.Forms; و کلاس آن: [assembly: Dependency(typeof(WN_XF_Database.iOS.DatabaseService_IOS))] namespace WN_XF_Database.iOS { public class DatabaseService_IOS :IDatabaseService { public SQLiteConnection GetConnection(string fileName) { try { var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var libraryPath = Path.Combine(documentsPath, "..", "Library"); var path = Path.Combine(libraryPath, fileName); var connection = new SQLiteConnection(path); return connection; } catch (Exception ex) { ex.Exception("DatabaseService_IOS"); } return null; } public void CopyDatabaseToLocal(string fileName) { try { var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var libraryPath = Path.Combine(documentsPath, "..", "Library"); var path = Path.Combine(libraryPath, fileName); if (!File.Exists(path)) { // daryafte db az masire nasb shodeye barname using (var sourceStream = File.Open("./" + fileName, FileMode.Open, FileAccess.Read)) { FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); ReadWriteStream(sourceStream, writeStream); } } } catch (Exception ex) { ex.Exception("DatabaseService_IOS.CopyDatabaseToLocal"); } } private void ReadWriteStream(Stream readStream, Stream writeStream) { try { int Length = 256; Byte[] buffer = new Byte[Length]; int bytesRead = readStream.Read(buffer, 0, Length); while (bytesRead > 0) { writeStream.Write(buffer, 0, bytesRead); bytesRead = readStream.Read(buffer, 0, Length); } readStream.Close(); writeStream.Close(); } catch (Exception ex) { ex.Exception("DatabaseService_IOS.ReadWriteStream"); } } } } خب کپی کردن دیتابیس از پوشه ی نصبی برنامه پوشه MyDocuments کمی در IOS و اندروید نسبت به UWP فرق داره، همانطور که در بالا می بینید یک تابع private هم برای کپی کردن آن نوشتیم. در پروژه اندروید هم کلاسی به نام DatabaseService_Android ایجاد نمایید. فضاهای نامی مورد نیاز: using SQLite; using System; using System.IO; using System.Threading.Tasks; using Xamarin.Forms; کلاس مورد نظر: [assembly: Dependency(typeof(WN_XF_Database.Droid.DatabaseService_Android))] namespace WN_XF_Database.Droid { public class DatabaseService_Android : IDatabaseService { public SQLiteConnection GetConnection(string fileName) { try { var documentspath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var path = Path.Combine(documentspath, fileName); var connection = new SQLiteConnection(path); return connection; } catch (Exception ex) { ex.Exception("DatabaseService_Android"); } return null; } public async void CopyDatabaseToLocal(string fileName) { try { var documentspath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var path = Path.Combine(documentspath, fileName); if (!File.Exists(path)) { var s = Android.App.Application.Context.Resources.OpenRawResource(Resource.Raw.myBookDatabase); FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); ReadWriteStream(s, writeStream); } await Task.Delay(1); } catch (Exception ex) { ex.Exception("DatabaseService_Android.CopyDatabaseToLocal"); } } private void ReadWriteStream(Stream readStream, Stream writeStream) { try { int Length = 256; Byte[] buffer = new Byte[Length]; int bytesRead = readStream.Read(buffer, 0, Length); while (bytesRead > 0) { writeStream.Write(buffer, 0, bytesRead); bytesRead = readStream.Read(buffer, 0, Length); } readStream.Close(); writeStream.Close(); } catch (Exception ex) { ex.Exception("DatabaseService_Android.ReadWriteStream"); } } } } خب حالا کلاس ها را ذخیره کنید و همه ی آنها را ببندید. در پروژه Shared یک کلاس به نام Dastan ایجاد کنید. این کلاس در اصل مدل دیتابیسی که من در SQLite ساختم، می باشد. فضای نامی مورد نیاز: using SQLite; کلاس داستان: public class Dastan { [PrimaryKey, AutoIncrement] public int Id { get; set; } public string Name { get; set; } public string Story { get; set; } public override string ToString() { return Name.ToString(); } } جدول من دارای سه ستون می باشد. Id برای شناسه، Name برای نام داستان و Story برای متن داستان. کلاس App.xaml.cs را باز کنید. رشته زیر را به صورت constant ایجاد کنید. این رشته نام فایل دیتابیس ما می باشد. چرا constant؟ زیرا نمی خواهیم به اشتباه آنرا تغییر دهیم. (این مقدار فقط readonly یعنی "فقط خواندنی" در نظر گرفته میشود.) public const string DBName = "myBookDatabase.db3"; خب تابع CopyDb را در این کلاس بنویسید: private void CopyDb() { try { DependencyService.Get<IDatabaseService>().CopyDatabaseToLocal(DBName); } catch (Exception ex) { ex.Exception("App.CopyDb"); } } خب این کد شاید برای شما کمی عجیب باشد! اما اینجا فلسفه ساخت Interface و Dependency را یاد خواهید گرفت. کار تابع Get در DependencyService اینه که یک مقدار از نوع T میگیره(T می تونه هر کلاسی باشه) و با در پلتفرم های مختلف کدی که ما ایجاد کردیم رو صدا میزنه. برای مثال اگر ما پروژه UWP را Deploy کنیم، زمانی که به این کد میرسه، DependencyService میاد interfaceـی که ما به نام IDatabaseService ساختیم رو صدا میزنه، این اینترفیس بصورت عادی هیچی نیست اما چون ما کلاس هایی در سه پلتفرم ایجاد کردیم که هم از این اینترفیس مشتق شده بودند و هم به عنوان Dependency اون ها تعریف کرده بودیم، میاد برای هر پروژه اون کلاس مورد نظر در پلتفرم مورد نظر رو صدا میزنه. که در اینجا تابع CopyDatabaseToLocal را فرا میخونه و کار Copy کردن دیتابیس از فولدر نصب شده برنامه به پوشه MyDocuments رو انجام میده. به عبارتی Dependency بصورت خودکار هنگام اجرای این کد میاد اون کدی که ما در پروژه پلتفرمی خاص ایجاد کردیم رو پیدا می کنه و اون رو فرا می خونه. خب حالا درون constructorـه App بعد از فرا خوانیِ InitializeComponent کد زیر را قرار دهید: CopyDb(); یعنی: public App () { InitializeComponent(); CopyDb(); حالا خط بعدی یعنی MainPage =... را به صورت زیر بنویسید: MainPage = new NavigationPage(new MainPage()); چرا NavigationPage؟ زیرا می خواهیم صفحه های جداگانه بسازیم و آنها را باز کنیم. این کلاس را ذخیره کرده و آنرا ببندید. کلاس دیگر در پروژه Shared به نام DatabaseHelper ایجاد نمایید. فضاهای مورد نیاز: using SQLite; using System; using System.Collections.Generic; using System.Linq; using Xamarin.Forms; کلاس مورد نظر: public class DatabaseHelper { SQLiteConnection con; public DatabaseHelper() { try { con = DependencyService.Get<IDatabaseService>().GetConnection(App.DBName); } catch (Exception ex) { ex.Exception("DatabaseHelper"); } } /// <summary> /// Gereftane kole database be sorate liste /// </summary> /// <returns>Liste db ro barmigardone</returns> public IEnumerable<Dastan> Items() { return (from t in con.Table<Dastan>() select t).ToList(); } /// <summary> /// Gereftane yek dastan /// </summary> /// <param name="id">id e dastane morede nazar</param> /// <returns>dastan ro barmigardone</returns> public Dastan GetItem(int id) { return con.Table<Dastan>().FirstOrDefault(t => t.Id == id); } /// <summary> /// Hazfe yek dastan /// </summary> /// <param name="id">id e dastan</param> public void DeleteItem(int id) { con.Delete<Dastan>(id); } /// <summary> /// Ezafe kardane dastan /// </summary> /// <param name="dastan">dastan</param> public void AddItem(Dastan dastan) { con.Insert(dastan); } /// <summary> /// Beroz rasanie dastan /// </summary> /// <param name="dastan">dastan</param> public void UpdateItem(Dastan dastan) { con.Update(dastan); } } فکر نکنم کدها گنگ باشن. فقط در constructor اومدیم با استفاده از DependencyService تابع GetConnection رو صدا زدیم تا SQLiteConnection فرا خوانده بشه. حال کلاس را ذخیره کرده و آنرا ببندید. صفحه طراحی MainPage را باز نمایید و کدهای زیر را بنویسید: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:WN_XF_Database" x:Class="WN_XF_Database.MainPage" Title="WN Db Sample"> <StackLayout> <Label Text="Name" Margin="2"/> <Entry x:Name="txtName" Placeholder="Enter story name"/> <Label Text="Story" Margin="2"/> <Editor x:Name="txtStory" HeightRequest="300"/> <Button x:Name="btnAdd" Text="Add" Clicked="btnAdd_Clicked"/> <Button x:Name="btnShow" Text="Show items" Clicked="btnShow_Clicked"/> </StackLayout> </ContentPage> صفحه را ذخیره کنید، سپس قسمت کدنویسی این صفحه را باز کنید و کدهای دو تابع رویدادهای آن را بنویسید: private void btnAdd_Clicked(object sender, EventArgs e) { var dastan = new Dastan(); var db = new DatabaseHelper(); dastan.Name = txtName.Text; dastan.Story = txtStory.Text; db.AddItem(dastan); } private void btnShow_Clicked(object sender, EventArgs e) { Navigation.PushModalAsync(new StoriesPage()); } تابع رویداد btnAdd_Clicked برای اضافه کردن داستان جدید به دیتابیس است. تابع btnShow_Clicked هم برای باز کردن صفحه ی داستان ها می باشد. StoriesPage صفحه ی ما برای نمایش عناوین داستان ها می باشد. برای ایجاد صفحه ی جدید، روی پروژه Shared راست کلیک کنید و گزینه Add new item را انتخاب کنید. در پنجره ی باز شده، Content Page را انتخاب کنید و نام آنرا StoriesPage قرار دهید. نکته: دو نوع ContentPage وجود دارد، یکی به اسم ContentPage و دیگری به نام ContentPage C# می باشد. نوع اول را انتخاب کنید(اسم بدون C#): کدهای XAML این صفحه را بیاورید و کدهای زیر را درون آن بنویسید: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WN_XF_Database.StoriesPage" Title="Stories"> <ListView x:Name="StoryListView" SeparatorVisibility="Default"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Grid HeightRequest="60"> <Grid.GestureRecognizers> <TapGestureRecognizer x:Name="ItemTap" Tapped="ItemTap_Tapped" NumberOfTapsRequired="1"/> </Grid.GestureRecognizers> <Label Text="{Binding Name}" TextColor="Black" VerticalOptions="CenterAndExpand" HorizontalOptions="End" Margin="5"/> </Grid> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> </ContentPage> صفحه را ذخیره کرده و صفحه کدنویسی آنرا باز کنید. فضاهای نامی مورد نیاز: using System; using System.Linq; using Xamarin.Forms; using Xamarin.Forms.Xaml; تابع بازنویسی شده OnAppearing را بنویسید. این تابع در اصل همان تابع Loaded در پروژه های یونیورسال میباشد! protected override void OnAppearing() { base.OnAppearing(); var db = new DatabaseHelper(); var list = db.Items(); Extensions.Output("Story count: " + list.Count()); StoryListView.ItemsSource = list; } آیتم های دیتابیس را به ItemsSourceـه ListView بایند می کنیم. تابع Tapped را برای آیتم ها می نویسیم: private void ItemTap_Tapped(object sender, EventArgs e) { try { var grid = sender as Grid; if (grid == null) return; var dastan = grid.BindingContext as Dastan; if (dastan == null) return; Navigation.PushModalAsync(new ShowStoryPage(dastan)); } catch (Exception ex) { ex.Exception("ItemTapped"); } } چون ما این تابع را برای Grid ساختیم پس sender را Cast می کنیم به Grid سپس BindingContext یا همان مدل بایندینگ را از نوع داستان Cast می کنیم. در آخر صفحه ShowStoryPage را باز می کنیم و اطلاعات را درون Constructor آن میفرستیم. صفحه ای جدید از نوع Content Page درون پروژه Shared ایجاد کنید و نام آنرا ShowStoryPage بگذارید. درون قسمت طراحی این صفحه کدهای زیر را بنویسید: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WN_XF_Database.ShowStoryPage" Title="Show story"> <ContentPage.Content> <StackLayout> <Label x:Name="txtName" TextColor="Black" HorizontalOptions="End" Font="15" Margin="5"/> <ScrollView> <Label x:Name="txtStory" TextColor="Black" HorizontalOptions="End" HorizontalTextAlignment="End" Margin="10"/> </ScrollView> </StackLayout> </ContentPage.Content> </ContentPage> صفحه را ذخیره کرده و قسمت کدنویسی آنرا باز کنید. در بالای constructor خط زیر را بنویسید: public Dastan CurrentDastan; یک کپی از تابع constructor بگیرید و یک پارامتر ورودی از نوع Dastan به آن اضافه کنید. یعنی: public ShowStoryPage () { InitializeComponent (); } public ShowStoryPage(Dastan dastan) { InitializeComponent(); CurrentDastan = dastan; } حال تابع بازنویسی شده OnAppearing را بنویسید تا اطلاعاتی که بارگذاری شده، را به تکست ها اضافه کنیم: protected override void OnAppearing() { base.OnAppearing(); if (CurrentDastan != null) { txtName.Text = CurrentDastan.Name; txtStory.Text = CurrentDastan.Story; } } به همین راحتی! دانلود سورس کد نمونه منبع: وین نویس
  2. سلام.تقاضا میشه از دوستانی که زامارین اندروید بلد هستن لطف کنن اموزش sqlite در زامارین بزارن، که شامل ثبت،حذف،بروزرسانی باشه.ممنون
  3. با سلام در این آموزش با مقدمات برنامه نویسی کراس پلتفرم (مالتی پلتفرم) با استفاده از Xamarin.Forms در خدمت شما هستم . فرض این آموزش بر این هست که شما برنامه نویسی به زبان سی شارپ (C# .Net) را از پیش فرا گرفته اید و آشنایی حداقلی با HTML یا XAML دارید . بنا به دلیل اینکه منابع موجود برای پرسش و پاسخ از Xamarin کمتر از منابع موجود برای Native پلتفرم ها میباشد ابتدا حتماً بر روی یکی از زبان های مبتنی بر سی شارپ تسلط داشته باشید . به دلیل شباهت بیشتر ترجیحاً یکی از این زبان ها / سیستم عامل ها را انتخاب کنید : UWP / WPF / Windows Phone Silverlight / Windows Runtime در این آموزش از Visual Studio 2017 و شبیه ساز اندروید مایکروسافت استفاده شده است . در قسمت اول آموزش به سراغ تنظیم امولاتور خواهیم رفت تا شبیه ساز دسترسی به اینترنت داشته باشد و پس آن به آموزش خواهیم پرداخت . امیدوارم که این آموزش مورد توجهتون قرار بگیره . » پیوند های مرتبط « آموزش نصب و راه اندازی زامارین با شبیه ساز مک آموزش تنظیم Visual Studio Emulator for Android جهت دسترسی به اینترنت (پست شماره #2 همین مطلب)
  4. سلام لطفا آموزش استفاده از دیتابیس sqlite در زامازین فورم را قرار دهید
  5. شروع برنامه نویسی برای گوشی های آیفون روش های مختلفی دارد، که یکی از آنها استفاده از زامارین و زبان سی شارپ است. این روش هم مانند روش های دیگر دردسر های خود را برای شروع دارد مخصوصا برای افرادی که سیستم مک (مک بوک یا ...) ندارند. در این آموزش سعی شده سریع ترین و بهترین روش برای شروع کار به شما یاد داده شود. چگونه macOS Sierra 10.12 را بر روی VirtualBox نصب کنیم ؟ در # مرحله اول VirtualBox را از این لینک دریافت کرده و سپس به راحتی و با زدن چند دکمه بعدی نصب کنید. # مرحله دوم فایل ویرچوال باکس که شامل مک او اس آماده شده هست را دریافت کنید و در پوشه و درایوی که به اندازه کافی (بالای 50 گیگ) جا دارد استخراج (Extract) کنید. #مرحله سوم یک ماشین مجازی جدید ایجاد کنید: (با تنظیمات زیر) تنظیم نام، نوع و ورژن مطابق شکل تنظیم 4 گیگ رم در مرحله بعدی انتخاب ماشین مجازی موجود و سپس انتخاب فایل استخراج شده در مرحله قبل تغییر تنظیمات در بخش سیستم > مادربورد، غیر فعال کردن فلاپی و تنظیم چیپست ICH9 مطابق شکل انتخاب 2 هسته فعال تنظیم 128 مگ رم گرافیک تنظیم آداپتور نتورک مطابق شکل #مرحله پنجم کد ها ویرچوال را وارد CMD کنید. CMD را در حالت administrator اجرا کنید و کد های موجود در فایل زیپ را دونه به دونه در کامند پیست کرده و اینتر را بزنید. # مرحله ششم اجرای ماشین مجازی قبل از اجرای ماشین مجازی به این نکته دقت کنید که hyper-v در سیستم شما روشن نباشد. در صورت اینکه به این سیستم نیاز دارید میتوانید با روش زیر این کار را انجام دهید. < داشتن همزمان hyper-v و سیستم های موازی دیگر در یک کامپیوتر: برای این کار C:\>bcdedit /copy {current} /d "No Hyper-V" The entry was successfully copied to {ff-23-113-824e-5c5144ea}. C:\>bcdedit /set {ff-23-113-824e-5c5144ea} hypervisorlaunchtype off The operation completed successfully. را در CMD , Administator اجرا کنید. دقت کنید که کدی را که در مرحله اول میدهد را در مرحله دوم وارد کنید. در صورت ری استارت کردن کامپیوتر با این صفحه روبرو میشوید که می توانید هایپر وی را غیر فعال کنید. > ماشین مجازی رو اجرا کرده و منتظر بمانید که ستاپ مک نمایان شود. مطابق شکل های زیر ستاپ را کامل کنید. حالا نوبت به راه اندازی ابزار های برنامه نویسی میرسه. 1- نصب XCode : شما میتوانید ایکس کد را از این لینک یا استور دانلود و به راحتی نصب کنید. (ورژن 8 به بالا) 2- نصب ویژوال استادیو مک: visual studio 2017 mac که میتوانید از سایت خود مایکروسافت دریافت کنید و قسمت های مورد نیاز خود را نصب کنید. تصویر محیط برنامه نکات مهم : > توصیه میشود از ورژن های قبلی زامارین استفاده نکنید زیرا ورژن های آخر مک اجازه دسترسی به فایل های سیستم را نمیدهد و زامارین در موقع کامپایل به مشکل بر میخورد. >برای انتقال فایل بین ویندوز و مک، شیر ویندوز را فعال کرده و در سیستم عامل مک قسمت Finder > Go > Connect to server آی پی ویندوز را زده و به فایل های شیر دسترسی داشته باشید. با آرزوی موفقیت و تولید اپ های بیشتر و با کیفیت ایرانی.
  6. سلام چطوری دیتابیس SQLite به برنامه اندروید متصل کنم ؟
  7. سلام به دوستان عزیز من قصد نوشتن یه برنامه با زامارین فرمز رو دارم و با توجه به اینکه این برنامه نیاز به یک پایگاه داده قوی برای نگهداری حجم عظیمی داده را دارد و همینطور میزان بالای تراکنش های موجود در لحظه بر روی پایگاه داده و همینطور اینکه این پایگاه داده قرار هست بین تمامی اپ های مربوطه بطور مشترک و بصورت انلاین مورد استفاده قرار بگیره در واقع به این معنی که قرار هست برنامه نوشته بشه برای تمامی پلتفرم های دسکتاپ ، موبایل و وب که یه پایگاه داده مشترک خواهند داشت و دسترسی به پایگاه داده هم بصورت انلاین هست خواستم دوستان اگر تجربه ای در این زمینه دارن راهنمایی کنید که بهترین انتخاب برای همچین منظوری چه پایگاه داده ای هست و روش اتصال رو هم اگر مطلئید توضیح بدید با تشکر. بخوام چند نر افزار مثال بزنم مثل quick of kings که در آن واحد و برای صدها هزار نفر همزمان ارتباط با پایگاه داده برقرار میکنه و بسیار هم روان هست اینها از چه پایگاه داده ای استفاده میکنند و به چه شکل. اگر در مورد Azure هم اطلاعاتی دارید و احتمال داره در این مورد به کارم بیاد هم توضیحاتی ارائه کنید بسیار سپاسگذار میشم. با تشکر از دوستانمون در وینویس
  8. سلام تو اندروید زامارین زمانی که اطلاعات یک sqldataadapter رو میخوام بریزم توی یه datatable ارورر Encoding 1252 data could not be found. make sure you have correct international codeset assembly installed and enabled رو دریافت میکنم، البته این مشکل فقط زمانی دیده میشه که پروژه بصورت release ساخته بشه ولی تو دیباگ اطلاعات رو از سرور میخونه و کامل نشون میده کسی میتونه در این زمینه راهنمایی کنه؟
  9. با سلام، یه سری نکات هست که بطور تجربی بدست آوردم و میتونه تو جلوگیری از خطا ها و دولوپ سریع تر کمکتون کنه. >> بعد از راه اندازی محیط برنامه و نصب sdk و ndk و jdk که مورد نیازه برای اندروید در زامارین سعی کنید ارتباط با اینترنت را همراه با وی پی ان داشته باشید، چون ممکنه سیستم به یک سری فایل نیاز پیدا کنه که باید از گوگل دانلود کنه که متاسفانه ایران تحریم هست ولی درصورت نداشتن وی پی ان می شود این فایل هارو بصورت دستی اضافه کرد. دقت داشته باشید که ورژن نوگت ها یا کامپوننت های Support گوگل باید مطابق با ورژنی که پروژه را برای آن اندروید کامپایل میگیرد باشد، نه جدیدترین آن. وقتی ورژن هدف کامپایل پروژه رو مثلا 6 در نظر میگیرید اصلا نگران اجرا شدنش روی ورژن های پایین تر در قدم نخست نباشید (4.1) و ابزار ها و دسترسی های مخصوص برای این موضوع مهم است. هیچ وقت مانند ویندوز یونیورسال تنظیمات خروجی برنامه رو بدون اطلاعات کامل تغییر ندهید، ممکن است باعث مشکل در آینده شود. نسخه دیباگ در حالت پیشفرض روی دیوایس واقعی کار نمیکند و نسخه ریلیسیس هم بر عکس. طبق عادت مانند برنامه نویسی ویندوز برای سبک شدن یا برطرف شدن ارور ها فولدر object و bin را پاک نکنید.
  10. 1- یکی از بزرگترین مشکلات من برای مدیریت بسته های اینترنت ایرانسل نداشتن دیوایس اندرویددی هستش میخواستم تست کنم ببینم روی امولاتور ویژال استودیو میشه برنامه ایرانسل من رو نصب کردو ...؟! 2- در حال شروع کردن یه برنامه هستم که نیاز به اینترنت روی امولاتور برای نقشه آنلاین. 3- نمیدونم تنظیماته کجای سیستم رو بهم ریختم ولی احتمال 99%همین مشکل رو تو امولاتور های دیگه هم خواهم داشت.(امولاتور ویندوز موبایل هم همین مشکل رو دارم.) اگر امکانش هست به یه آموزش مختصر مفید که به نکات و تنضیمات بیسک اشاره کنه و مفهومی سلوشن بده هم اکنون نیازمند یاری گرمتان هستیم.
  11. Xamarin Visual Studio Enterprise 4.0.1.145 نام یک محیط جدید و فوق العاده پیشرفته به منظور توسعه اپلیکیشن های iOS ، اندروید و ویندوز در ویژوال استودیو است توسط زامارین ویژوال استودیو ، حتی به یک خط کدنویسی XML هم نیاز ندارید ! شما به سادگی می توانید اسکرین های اندروید را با Drag&Drop اپ بیلدر ایجاد کنید. حقیقت این است که برنامه نویسی اندروید کار آسانی نیست ؛ اما Xamarin Android Designer همه چیز را در این زمینه ساده سازی می کند ؛ شما می توانید نتیجه کارهای خود را در رزولیشن های گوناگون گوشی های اندرویدی مشاهده کنید. زارامین ویژوال استودیو ، مناسب ترین روش برای دیباگ و تست اپلیکیشن های توسعه داده شده اندروید و iOS را در اختیارتان قرار می دهد ؛ بنابراین به کمک Xamarin Visual Studio ، لذتی بی سابقه را در توسعه اپلیکیشن های مدرن اندروید و iOS تجربه کنید . ویژگی های نرم افزار Xamarin Visual Studio Enterprise : ساخت اپلیکیشن های موبایل در زبان سی شارپ ساخت اپلیکیشن های iOS در ویندوز عملکرد دقیق تر از Xcode ساخت اپلیکیشن های اندروید بدون نیاز به کدنویسی XML ویرایش حرفه ای شاخصه های اپلیکیشن های اندروید و iOS دسترسی کامل به API های اندروید و iOS در ویندوز از طریق این لینک می توانید این نرم افزار را دانلود کنید.