بایدی وجود نداره، چیزی رو از ViewModel به View منتقل کنید که در View لازمه.
سلامی مجدد
خیلی ممنون استاد .
نوع ImageSource که طبق چیزی که گفته بودین ، به View مربوط میشه (پروپرتی اش در View تعریف میشه) .
اطلاعات BackupStatus هم که در پروپرتی ای در Model تعریف میشه .
از Converter هم که برای بایندینگ فعلا نمیخوام استفاده کنم .
پس لازمه اطلاعات تغییرِ شیِ پروپرتیِ نوعِ BackupStatus ، از Model به ViewModel و بعد به View منتقل بشه دیگه؟
اسم PropertyChanger رو هم خودتون اختراع کرده اید.
اشتباه تایپی بود .
اون مشخصه رو برای چی می سازید؟ برای اینکه یا مقدارش رو مستقل از سایر مقادیر تغییر بدهید و یا بخواهید به منبعی Bind کنید.
منظورتون پروپرتیِ نوعِ ImageSource هست؟
اگه آره ، برای اینکه این پروپرتی را به عنوان Binding Source Property برای پروپرتیِ ImageSource ئه شیِ ImageDrawing (که در شیِ Image استفاده میشه) ، استفاده کنم و بهش Binding کنم .
خودِ این پروپرتی (از نوعِ ImageSource که در View تعریف شده هست) ، با تغییرِ مقدارِ پروپرتیِ نوعِ BackupStatus (که در Model تعریف شد) ، تغییر میکنه . اما چون نوع این دو پروپرتی با هم متفاوت هستن (یکی از نوع BackupStatus و یکی هم از نوع ImageSource) ، و چون حداقل تا الان نمیخوام از Converter برای بایندینگ شون استفاده کنم ، پس نمیتونم این دو پروپرتی را با هم Binding کنم .
اولا شما نمی خواهید مقدار ImageSource رو مستقلا تغییر بدهید، چون میخواهید بر اساس مقدار اون Enum ئه تعیین بشه.
بله . همینطوره .
ثانیا منبعی ندارید که بهتون ImageSource تحویل بده و بخواهید بهش Bind کنید،
بله . درسته (چون حداقل تا الان نمیخوام از converter استفاده کنم) .
در پرانتز اینو بگم که مایکروسافت برای استفاده از converter در Binding ، بجای استفاده از اینترفیس IValueConverter ، از دلیگیت استفاده میکرد ، خیلی راحت تر بودیم . مجبور نبودیم برای هر شی از Binding ای که به تبدیل نیاز داره ، یه کلاس مجزا بسازیم .
یا حداقل 2 نوع converter میزد . یکی از اینترفیس و یکی هم از دلیگیت استفاده میکرد .
نمیشه ما یه کاری کنیم (یه کلاسی بسازیم و یا کار دیگه ای) که Converter را بجای اینکه یه کلاسی بهش بدیم ، یه دلیگیت ای بهش بدیم؟
تا برای هر شی از Binding (که نیاز به converter داریم) ، از اون متدها استفاده کنیم؟
آخه این جوری خیلی بدجور میشه . فرض کنید در یه پروژه که 100 تا Binding ای انجام میدیم که نیاز به Convert دارن . 100 تا هم براشون باید کلاس مجزا بسازیم .
پس برای چی دارید مشخصه می سازید؟
اگر قراره ImageSource ئه فقط داخل خود View استفاده بشه مشخصه اش برای چیه؟
دقیقا منظورتون را متوجه نشدم .
پروپرتیِ نوعِ BackupStatus که در Model لازم هست که اطلاعات وضعیت بکاپ سیستم کاربر را توی خودش داشته باشه .
پروپرتیِ نوعِ ImageSource در View را هم حداقل به عنوان Binding Source Property برای پروپرتیِ ImageSource ئه شیِ ImageDrawing (که در شیِ Image استفاده میشه) میخوام .
یا اینکه منظورتون اینه که بجای این همه کار ، یه پروپرتیِ نوعِ BackupStatus که در Model تعریف کردم ، حالا بجای اینکه پروپرتیِ نوعِ ImageSource را در View تعریف کنم ، مستقیما پروپرتیِ BackupStatus در Model را با یه Converter ، به عنوان Binding Source Property برای پروپرتیِ ImageSource ئه شیِ ImageDrawing (که در شیِ Image استفاده میشه) ، استفاده کنم؟
منظورتون اینه که میگین پس تعریفِ پروپرتیِ نوعِ ImageSource در View را میخوام چی کار؟
از بیرون بهش ImageSource میرسه؟
از بیرون (از Model) ، بهش Enum ای از نوع BackupStatus میرسه . البته به این پروپرتی نمیرسه .
نوع Enum ، به متدی در View میرسه که بعدش ، اون نوع را در متد ، تبدیل به ImageSource میکنم .
اون متد در View هم حالا یا به عنوان دلیگیت ، از رویدادی در ViewModel فراخونی میشه یا روشی شبیه به این .
اگر قراره مقدار ImageSource ئه وابسته به Enum باشه و ImageSource ئه توسط کدی در View ایجاد بشه و بعد در المنت های View نمایش داده بشه، چرا دیگه اصلا برای ImageSource ئه مشخصه تعریف می کنید؟
برای مقدار string یا object اون Enum ئه مشخصه بسازید. همون موقع که مقدار string یا object اون Enum رو در یک مشخصه View دریافت کردید ImageSource رو بسازید و بی واسطه در المنت مورد نظر قرار بدهید.
من اگه بگم دقیق متوجه نشدم ، میبخشید من را؟
این ، همین روشی نیست که من الان دارم میرم مگه؟
طبعا هم وقتی مقدار enum تغییر بکنه، رابط در ViewModel هم به واسطه INotifyPropertyChanged مطلع میشه و مقدار جدیدی منتقل می کنه، Binding ای که مقدارش رو به View منتقل می کنه به View اطلاع میده و نیازی به اتصال دستی متد به رخداد PropertyChanged نیست.
اون پروپرتی نوع string را در ViewModel شاید نسازم . احتمالا نوع BackupStatus را از Model میگیرم (توسط ViewModel به View منتقل میکنم) و در View هم که اطلاعاتِ BackupStatus را بصورت Object که در متدی گرفتم ، نوع رشته و کلا تبدیل به نوعِ ImageSource را مستقیما همونجا انجام میدم .
تشکر استاد .