PDA

View Full Version : اتصال usercontrol به viewmodel در mvvm - میشه کمک کنید.



سیدسبحان
شنبه 05 دی 1394, 18:33 عصر
سلام
اقا من هرکاری میکنم که دکمه داخل user control م به view model م وصل شه ، نمیشه
میشه یه نگاهی بهش بندازید؟؟؟

واقعا ازتون ممنون میشم

ali_md110
شنبه 05 دی 1394, 19:36 عصر
سلام
برنامتون ی سری نیازمندیها کم دارد
وبومدل از واسط InotifyPropertyChanged ارث بری کنه تا تعییرات در اعضای ویومدل به سمت ویو و از سمت ویو دریافت شود
میتونید از یک فریموورک خوب تو برنامه هاتون استفاده کنید مثل Mvvm Light
دیتاکانتکست UserControl مشخص نشده
بجای فرمتون اونو توی سازنده UserControl تون بنویسید
this.DataContext = new ViewModel();

ویندوز شما دیتاکانتکست اون صحیح تنظیم نشده
باید یه یک نوع وهله سازی شده بایند بشه و اگر مستقیم بنویسید <Grid DataContext="ViewModel"> جوا ب بخواهد داد این ViewModel باید وهله سازی بشه تا فرمتون بتونه از منابع ویومدل استفاده کنه

سیدسبحان
شنبه 05 دی 1394, 21:38 عصر
سلام
برنامتون ی سری نیازمندیها کم دارد
وبومدل از واسط InotifyPropertyChanged ارث بری کنه تا تعییرات در اعضای ویومدل به سمت ویو و از سمت ویو دریافت شود
میتونید از یک فریموورک خوب تو برنامه هاتون استفاده کنید مثل Mvvm Light
دیتاکانتکست UserControl مشخص نشده
بجای فرمتون اونو توی سازنده UserControl تون بنویسید
this.DataContext = new ViewModel();

ویندوز شما دیتاکانتکست اون صحیح تنظیم نشده
باید یه یک نوع وهله سازی شده بایند بشه و اگر مستقیم بنویسید <Grid DataContext="ViewModel"> جوا ب بخواهد داد این ViewModel باید وهله سازی بشه تا فرمتون بتونه از منابع ویومدل استفاده کنه

واقعا ممنون ازتون
اره INotifyPropertyChange رو میدونم. چون درباره دیتا کانتکست سوال داشتم، فقط همین قسمت هارو نوشتم توی مثالم.

خب اینطوری فهمیدم دوتا کار رو باید انجام بدم:
1- دیتا کانتکست User Control1 رو ، ViewModel قرار بدم.
که شما گفتید راهش اینه که توی سازنده اش ، این رو بنویسم:


this.DataContext = new ViewModel();

که منم نوشتم و سازنده اش الان این هست:

public UserControl1() {
InitializeComponent();
this.DataContext = new ViewModel();
}

2- گفتید وهله سازی کنم تا grid ام بتونه ازش استفاده کنه.
یه مشکل فقط دارم. اونم این هست که معنی "وهله" رو من الان 5 ماهه نمیفهمم یعنی چی ؟!
هرجا هم میبینم، گیج میشم.

ali_md110
شنبه 05 دی 1394, 22:19 عصر
وهله میشه New کردن یک شی
دقیقا مثل اش پزی که میخاد پلو بپزه و هر وقت خواست سر کیسه برنجی رو باز میکنه و مقدار لازم رو بر میداره و بعدش سر کیسه رو میبنده
بعضی از کلاسها باید وهله سازی بشن و بعضی نمیشه مثل کلاس استاتیک یعنی مستقیم با صدا زدن کلاس میشه به اعضای درونش دسترسی داشت
ویومدل ها نباید استاتیک باشند

سیدسبحان
یک شنبه 06 دی 1394, 06:44 صبح
وهله میشه New کردن یک شی
دقیقا مثل اش پزی که میخاد پلو بپزه و هر وقت خواست سر کیسه برنجی رو باز میکنه و مقدار لازم رو بر میداره و بعدش سر کیسه رو میبنده
بعضی از کلاسها باید وهله سازی بشن و بعضی نمیشه مثل کلاس استاتیک یعنی مستقیم با صدا زدن کلاس میشه به اعضای درونش دسترسی داشت
ویومدل ها نباید استاتیک باشند


من فیلد هارو ، به صورت متغیر تعریف کرده بودم.
حواس نمیذارن که !:قهقهه:

یعنی کد زیر رو یادم رفته بود بزارم:

{ get; private set; }


ولی به لطف شما بالاخره فهمیدم که "وهله" یعنی همون "شی" خودمون:لبخندساده:
دوباره برم از پنج ماه پیش، هرچی که خوندم و توش کلمه "وهله" بود رو از اول بخونم.
خخخخخخخخخخخخ
اقا من خیلی دوست دارم شما با دید خودت، پروژه مو درست کنی ببینم راه صحیحش چی هست.
امکانش هست؟
البته اگه وقت داری.
همین برنامه رو که ضمیمه کردم رو خودت با این چیزایی که میگی...

ali_md110
یک شنبه 06 دی 1394, 09:51 صبح
یک Template واست فرستادم از روی اون انجام بدید
برنامه به چند قسمت تبدیل شده137694
فقط یادتون باشه از nuget کامپوننت mvvm light و common service locator رو نصب کنید
کلیک راست روی پروژهPresentation بکنید و Buld بزنید خودش میره از سایت دانلود میکنه
اگر نشد روی همین پروزه یا سولوشن کلیک راست کنید و manage nuget pachkage رو بزنید و توی قسمت جستجو mvvm light رو بزنید و نصب کنید