locked
שני Instance-ים של ה- ViewModel RRS feed

  • שאלה

  • היי

     

    נתקלתי בבעיה שאני לא מוצא לה כיוון.

    ה- Bootstrapper יוצר לי Instance-ים של ה- ViewModel-ים שלי, ולכן הם גם חייבים לממש את IModule.

    ה- Initialize של IModule רושם ויוצר Instance של ה- View שלי.

    כדי לחבר בין ה- View ל- ViewModel אני חייב ליצור Instance של ה- ViewModel ןלחבר אותו ל- DataContext של ה- View.

    מהתהליך מעלה נוצרים לי שני Instance-ים של ה- ViewModel.

     

    איך אני נפתר מהבעיה הזו?

    יום רביעי 25 יולי 2012 08:42

תשובות

  • הי שחר,

    לא ברור מהשאלה שלך, אתה עובד עם Prism?

    אם הבנתי אותך נכון, למה ViewModel מממש IModule? לדעתי פספסת פה משהו. מודול הוא יחידה לוגית/ואף פיסית (DLL), עצמאית, ולרוב בלתי תלויה, שיכולה להכיל אך לא חייבת, אחד או יותר: Services, Views, ViewModels, Model Layer וכו'.

    ViewModel מייצג לוגיקה אפליקטיבית עבור View ספציפי אחד בלבד.

    אם אתה מעוניין ליצור ViewModel בעזרת DI, תשתמש ב- DI Container כגון Unity. אפשר גם באמצעות MEF.

    // Create the view-model using the Unity container.
    IUnityContainer container = ...;
    // Register the view-model type with a contract. For example interface. Then create it later using that contract.
    var viewModel = container.Resolve<IYourViewModel>();
    
    // The view can be also instantiated using the container, if it uses dependencies.
    IUnityContainer container;
    var view = container.Resolve<IYourView>();
    

    לצורך העניין, Prism תומך בשניהם ואף באחרים.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • הוצע כתשובה על-ידי תומר שמםModerator יום חמישי 26 יולי 2012 10:51
    • סומן כתשובה על-ידי Elad R Katz יום חמישי 26 יולי 2012 13:24
    יום רביעי 25 יולי 2012 12:41
    מנחה דיון

כל התגובות

  • הי שחר,

    לא ברור מהשאלה שלך, אתה עובד עם Prism?

    אם הבנתי אותך נכון, למה ViewModel מממש IModule? לדעתי פספסת פה משהו. מודול הוא יחידה לוגית/ואף פיסית (DLL), עצמאית, ולרוב בלתי תלויה, שיכולה להכיל אך לא חייבת, אחד או יותר: Services, Views, ViewModels, Model Layer וכו'.

    ViewModel מייצג לוגיקה אפליקטיבית עבור View ספציפי אחד בלבד.

    אם אתה מעוניין ליצור ViewModel בעזרת DI, תשתמש ב- DI Container כגון Unity. אפשר גם באמצעות MEF.

    // Create the view-model using the Unity container.
    IUnityContainer container = ...;
    // Register the view-model type with a contract. For example interface. Then create it later using that contract.
    var viewModel = container.Resolve<IYourViewModel>();
    
    // The view can be also instantiated using the container, if it uses dependencies.
    IUnityContainer container;
    var view = container.Resolve<IYourView>();
    

    לצורך העניין, Prism תומך בשניהם ואף באחרים.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • הוצע כתשובה על-ידי תומר שמםModerator יום חמישי 26 יולי 2012 10:51
    • סומן כתשובה על-ידי Elad R Katz יום חמישי 26 יולי 2012 13:24
    יום רביעי 25 יולי 2012 12:41
    מנחה דיון
  • היי תומר

    הבוקר כבר תיקנתי את טעותי והפרדתי בין ה- ViewModels לבין המימושים של ה- IModule.

    לגבי השאר, לא הבנתי לעומק כנראה כי עוד לא הגעתי לשם - אשמח אם תוכל להפנות אותי לרפרנסים לקריאה.

    תודה


    • נערך על-ידי Shahar Eldad יום חמישי 26 יולי 2012 10:25 טעויות כתיב
    יום חמישי 26 יולי 2012 10:24
  • הי שחר,

    אתה בטוח ש- Prism היא התשתית הנכונה עבורך? בגדול שימוש במודולים ב-Prism בד"כ נפוץ בבניית אפליקציות מורכבת, Composite Application בסדר גודל בינוני עד גדול, עם צוות לא קטן, למרות שאפשר לעבוד עם Prism כתשתית MVVM בלבד, אבל קח בחשבון שלזה יש תשתיות מוצלחות יותר כמו MVVM Light ו- Caliburn Micro. בשניהם יש דוקומנטציה שאפשר ללמוד ממנה הרבה.

    בכל אופן, אם אתה ממשיך עם Prism, אז מאוד מומלץ לקרוא את הדוקומנטציה שמגיעה ביחד איתו.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    יום חמישי 26 יולי 2012 10:50
    מנחה דיון
  • היי

    אני לומד Prism כרגע אז יש לי הרבה ניסוי וטעייה.

    אני מודע לעובדה שלא עם כל הכלים של Prism תמיד נחוץ לעבוד וזה תלוי מקרה אבל כרגע בינתיים אני לומד להכיר אותם ואת היתרונות והחסרונות שלהם

    תודה

    יום ראשון 29 יולי 2012 06:42