PDA

View Full Version : سوال: لود Region ها بر روی Event ها



mehri_ema
یک شنبه 08 خرداد 1390, 10:04 صبح
با سلام
من برنامه ای دارم با استفاده از ساختار MVVM که در اون از Region ها استفاده کردم.
در Shell یک treeview دارم که می خواهم با کلیلک روی هر نود View مربوط به اون در Region بیاد این کارو چه طور می تونم انجام بدهم.

Amir Oveisi
یک شنبه 08 خرداد 1390, 11:37 صبح
MVVM رو به شکل های مختلفی میشه پیاده سازی کرد (حالا نمیدونم شما چه روشی رو استفاده کردید) اما در کل برای اینکه بر اساس یک شرایطی یک view متناسب با یک viewmodel رو اگر بخواید در main view نشون بدید، به این شکل عمل میشه که در main view یک DataTemplate بصورت resource تعریف می کنید و DataType اون رو به کلاس ViewModel مورد نظر Set می کنید، و مقدار Template اون DataTemplate رو هم به کلاس View متناسب با اون ViewModel مقدار میدید. بعد اون container ای که قراره view ها در اون load بشن رو DataSource اش رو به viewModel، بایند می کنید. معمولا از کنترل ItemsControl به عنوان container استفاده میشه.
نمونه کد:
<Window.Resources>
<DataTemplate DataType="{x:Type myViewModelsNameSpace:MyViewModel}">
<myViewsNameSpace:MyView/>
</DataTemplate>
</Window.Resources>

DataSource یا DataContext (بر اساس نوع container) کنترلی رو که به عنوان contiainer استفاده کردید رو bind می کنید به property از viewModel متناظر با MainView که اون property حاوی ViewModel ای هست که شما میخواین بر اساس اون یک View رو load کنین. اون DataTemplate باعث میشه که بر اساس نوع ViewModel ای که از طریق binding میاد به کانتینر، View تعریف شده در DataTemplate رو داخلش load کنه. به عبارت دیگه، اگر ViewModel ای bind شده به container، از نوع MyViewModel باشه، داخلش MyView لود میشه ، چون تو DataTemplate اینجوری تعریف شده. حالا شما اگر چند تا View رو میخواین نشون بدید، باید برای هر کدوم یک DataTemplate به همین صورت داشته باشید.

موفق باشید