در این مقاله به بررسی اولیه فریمورک Catel و برخی ویژگیهای آن خواهیم پرداخت.همانطور
که میدانید فریمورکهای متعددی برای MVVM به وجود آمده اند، مانند MVVM
Light یا Caliburn و Chinch و ... که هر کدام از آنها دارای ویژگی هایی
میباشند اما Catel تنها یک فریمورک برای MVVM نیست بلکه دارای قسمتهای
دیگری مانند کنترلهای اختصاصی و سرویسهای متعدد و پرکاربرد
و Extensionهای مفید و ... نیز میباشد که کار توسعه یک برنامه MVVM را
ف ...
SimpleIoc به صورت پیش فرض در پروژه های MVVM Light موجود میباشد. قطعه کد پایین به صورت پیش فرض در پروژههای MVVM Lightایجاد میشود.
در کلاس ViewModelLocator ما تمام میانجی(Interface)ها و اشیا(Objects)ی مورد نیازمان را ثبت(register) میکنیم.
در ادامه اجزای مختلف آن را شرح میدهیم.
class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default) ...
در WPF و Silverlight میتوان با استفاده از مقید سازی (DataBinding) کنترلها را به منبعهای داده متصل
کرد. این منابع به چند شیوه مختلف مانند استفاده مستقیم از خصوصیتSource قابل دسترسی هستند. یکی از این روش ها، ارث بری از DataContext نزدیکترین والد است.همانطور که گفته شدDataContext هر
کنترل، توسط تمامی فرزندان آن قابل دسترسی است. اما در بعضی
مواقع، زمانیکه کنترل فرزند، بخشی از visual یا logical tree نباشند، دسترسی به DataContext وجو ...
یکی از خوبیهای استفاده از Presentation Patternها بالا بردن تست پذیری برنامه و در نتیجه نگهداری کد میباشد.MVVM الگوی محبوب برنامه نویسان WPF و Silverlight میباشد. به صرف استفاده از الگوی MVVM نمیتوان اطمینان داشت که ViewModel کاملا تست پذیری داریم. به عنوان مثلا اگر در ViewModel خود مستقیما DialogBox کنیم یا ارجاعی از View دیگری داشته باشیم نوشتن آزمونهای واحد تقریبا غیر ممکن میشود. قبلا دربارهی این مشکلات و راه حل آن مطلب در سایت ...
در نرم افزارهای تحت ویندوز روشها و سلیقههای متفاوتی برای چینش فرمها ، منوها و دیگر اجزای برنامه وجود دارد. در یک نرم افزار اتوماسیون اداری که فرمهای ورود اطلاعات زیادی دارد فضای کافی برای نمایش همهی فرمها به کاربر نیست. یکی از روش هایی که میتواند به کار رود تقسیم قسمتهای مختلف نرم افزار در Viewهای جداگانه است. این کار استفادهی مجدد از قسمتهای مختلف و نگهداری کد را سهولت میبخشد.
الگوی متداولی که در نرم افزارهای WPF و Silverli ...
بسیاری از برنامههای دسکتاپ نیاز به نمایش پنجرههای دیالوگ استاندارد ویندوز مانند OpenFileDialog و SaveFileDialog را دارند و سؤال اینجا است که چگونه اینگونه موارد را باید از طریق پیاده سازی صحیح الگوی MVVM مدیریت کرد؛ از آنجائیکه خیلی راحت در فایل ViewModel میتوان نوشت new OpenFileDialog و الی آخر. این مورد هم یکی از دلایل اصلی استفاده از الگوی MVVM را زیر سؤال میبرد : این ViewModel دیگر قابل تست نخواهد بود. همیشه شرایط آزمونهای واحد ...
ما در ViewModel دسترسی مستقیمی به هیچ یک از اشیاء موجود در View نداریم (و درستش هم همین است). الان فرض کنید که میخواهیم از طریق ViewModel یک View را ببندیم؛ مثلا متد Close آن پنجره را فراخوانی کنیم. به عبارتی در حالت کلی میخواهیم یکی از متدهای تعریف شده یکی از عناصر بصری موجود در View را از طریق ViewModel فراخوانی نمائیم.برای حل این مساله از فایلهای همان SDK مرتبط با Expression blend استفاده خواهیم کرد.ابتدا ارجاعاتی را به اسمبلیهای S ...
قسمت اول این بحث و همچنین پیشنیاز آنرا در اینجا و اینجا میتوانید مطالعه نمائید.همهی اینها بسیار هم نیکو! اما ... آیا واقعا باید به ازای هر روال رویدادگردانی یک Attached property نوشت تا بتوان از آن در الگوی MVVM استفاده کرد؟ برای یکی دو مورد شاید اهمیتی نداشته باشد؛ اما کم کم با بزرگتر شدن برنامه نوشتن این Attached properties تبدیل به یک کار طاقت فرسا میشود و اشخاص را از الگوی MVVM فراری خواهد داد.برای حل این مساله، تیم Expression Ble ...
اگر ViewModel را همان فایل code behind عاری از ارجاعاتی به اشیاء بصری بدانیم، یک تفاوت مهم را علاوه بر مورد ذکر شده نسبت به Code behind متداول خواهد داشت: وهله سازی آن باید دستی انجام شود و خودکار نیست.اگر به ابتدای کلاسهای code behind دقت کنید همیشه واژهی partial قابل رویت است، به این معنا که این کلاس در حقیقت جزئی از همان کلاس متناظر با XAML ایی است که مشاهده میکنید؛ یا به عبارتی با آن یکی است. فقط جهت زیبایی یا مدیریت بهتر، در دو کل ...
عموما هنگام طراحی یک View، خیلی زود به حجم انبوهی از کدهای XAML خواهیم رسید. در ادامه بررسی خواهیم کرد که چطور میتوان یک View را به چندین View خرد کرد، بدون اینکه نیازی باشد تا از چندین ViewModel (یا همان code behind عاری از ارجاعات بصری سابق قرار گرفته در یک پروژه جدای دیگر) استفاده شود و تمام این View های خرد شده هم تنها از یک وهله از ViewModel ایی خاص استفاده کنند و با اطلاعاتی یکپارچه سروکار داشته باشند؛ یا در عمل یکپارچه کار کنند. ای ...