PDA

View Full Version : سوال: چرا توی mvvm باید کنترلها داخل user control تعریف شه؟



سیدسبحان
جمعه 27 آذر 1394, 10:09 صبح
سلام
وقت بخیر

من یه سوال برام پیش اومده.
اونم اینکه چرا توی الگوی طراحی mvvm ، کنترلهارو برای داخل user control تعریف کنیم؟

چرا خب توی فرم نمیسازیم؟
اگه مثلا همه توی فرم باشن، مشکلی پیش میاد؟

ali_md110
چهارشنبه 02 دی 1394, 12:19 عصر
سلام
میتونید از فرم یا Window استفاده کنید
UserControl ها در واقع تکه تکه کردن یک فرم میتونه حساب بیاد که هر UserControl به یک ویومدل خاض متصل میشه
در این الگو DataContextهر فرم در ان واحد فقط میتونه به یک ViewModelبایند بشه که بعضی وقتا مشکل ساز میشه
فرض کنید فرمی دارید که چند قسمت هست و هرقسمت باید به یک ویومدل خاص دسترسی داشته باشه در اینجا UserControl خیلی مناسب هست

سیدسبحان
چهارشنبه 02 دی 1394, 17:44 عصر
سلام
میتونید از فرم یا Window استفاده کنید
UserControl ها در واقع تکه تکه کردن یک فرم میتونه حساب بیاد که هر UserControl به یک ویومدل خاض متصل میشه
در این الگو DataContextهر فرم در ان واحد فقط میتونه به یک ViewModelبایند بشه که بعضی وقتا مشکل ساز میشه
فرض کنید فرمی دارید که چند قسمت هست و هرقسمت باید به یک ویومدل خاص دسترسی داشته باشه در اینجا UserControl خیلی مناسب هست

آها!!
پس به خاطر اینه...
ولی بنظرم بشه برای اتصال چند ویومدل به یک دیتا کانتکست، میشه از هر کدوم یه شی ساخت و همه رو به دیتا کانتکست فرممون متصل کنیم.
یعنی همه رو در یک تابع بسازیم و دیتا کانتکست فرم رو به اون تابع وصل کنیم.

ali_md110
چهارشنبه 02 دی 1394, 23:55 عصر
ببینید Viewmodel میشه مرکز فرمان دهی در MVVM و برنامه و هر ویومدل یک دیتاکانتکس محسوب میشوند
وقتی یگ فرم به دیتاکانتکس Bind میکنیم در واقع اون رو به یک Proprerty از نوع ویومدل بایند کردیم

حالا اگر یک ویومدل بسازیم بنام MainViewModel و و دو ویومدل دیگه دشته باشیم بنام ViewModelA و ViewModelB از روی این دو ویومدل درون این MainViewmodel اعضایی بسازیم



public ViewModelA VMA{get;set;}
public ViewModelB VMB{get;set;}


و این MainViewModel رو به فرم بایند کنیم
در ان واحد به سه ویومدل در View یا فرم برنامه دسترسی داریم و میتونیم از اعضای درون اون استفاده کنیم
البته این زمانی مناسب هست که ویومدلهای AوB پارامتر نداشته باشن
چون در سطح پیشرفته باید به ویومدل نیازمندیهای اون رو تزریق کرد و معمولا در سازنده کلاس این کار رو انجام میدن و اگر بخواهیم از روی یک ویومدل سازنده پارامتری در MainViewModel وهله ای بسازیم استثنا پرتاب مبشود و مشلات خود را دارد

سیدسبحان
پنج شنبه 03 دی 1394, 07:54 صبح
ببینید Viewmodel میشه مرکز فرمان دهی در MVVM و برنامه و هر ویومدل یک دیتاکانتکس محسوب میشوند
وقتی یگ فرم به دیتاکانتکس Bind میکنیم در واقع اون رو به یک Proprerty از نوع ویومدل بایند کردیم

حالا اگر یک ویومدل بسازیم بنام MainViewModel و و دو ویومدل دیگه دشته باشیم بنام ViewModelA و ViewModelB از روی این دو ویومدل درون این MainViewmodel اعضایی بسازیم



public ViewModelA VMA{get;set;}
public ViewModelB VMB{get;set;}


و این MainViewModel رو به فرم بایند کنیم
در ان واحد به سه ویومدل در View یا فرم برنامه دسترسی داریم و میتونیم از اعضای درون اون استفاده کنیم
البته این زمانی مناسب هست که ویومدلهای AوB پارامتر نداشته باشن
چون در سطح پیشرفته باید به ویومدل نیازمندیهای اون رو تزریق کرد و معمولا در سازنده کلاس این کار رو انجام میدن و اگر بخواهیم از روی یک ویومدل سازنده پارامتری در MainViewModel وهله ای بسازیم استثنا پرتاب مبشود و مشلات خود را دارد

عجب!
میشه این قسمت اخرو بیشتر توضیح بدید؟
یه پروژه دارم کار میکنم که به مشکل بر خوردم؛ به نظرم این موردی باشه که شما اشاره کردی.

ali_md110
پنج شنبه 03 دی 1394, 19:49 عصر
منظوزم Dependency injection هست که یکی از مسائل مهم برنامه نویسی هست
معناش میشه ترزیق وابستگی
یعنی منابع یک کلاس یا ویومدل ما از ظریق پاس کردن آرگومان به سازنده کلاس یا از طریق سازنده در Property ها تامین کنیم
معمولا از Interface ها استفاده میشه
و این واسط ها بصورت پارمامتر به سازنده کلاس ارسال میشه
این واسط ها با کلاسهای Implemention انها وظیفه عملیات های اصلی برنامه ما عهده دارن
فرض کنیم یک مدل ذاریم بنام Person
خب این کلاس عملیاتی نظیر درج حذف و جستجو داره
ما بجای اینکه مستقیم درون ویومدل این عملیاتها رو انجام بدیم توسط واسطها و این کلاسهای پیاده سازی کننده انجام میدیم
و هرگاه خواستیم درون ویومدل بکار ببریم واسط ها رو صدا میزینم
به این میگن تزریق وابستگی