سلامی مجدد
دوست مون اشاره کردن .
اما دقت کنید که اگه به خاصیت های مخصوص command (مثل فعال یا غیر فعال سازی کنترل و ...) یا command های از پیش تعریف شده نیاز ندارید ، و صرفا میخواید در حد یک هندلر برای اتصال به رویداد از command استفاده کنید ، میتونید بجای command ، مستقیما از خودِ رویداد استفاده کنید .
-------------------------
در ViewModel تون ، کدهایی دیده میشه که نمیدونم برای چیه . فرضا نمیدونم متد GetPersonInfo و اشیاء هایی که توش ساخته میشن ، چی هستن .
اما دقت کنید که ViewModel فقط برای ارتباط دادن و انتقال داده از لایه ی View به لایه ی Model هست . وظیفه ی دیگه ای مثل محاسبات منطق تجاریِ برنامه و ... را نداره .
در متد GetheaderText ، از المنت و کنترل ها استفاده کردید که اشتباست . کار با کنترل ها و المنت ها ، وظیفه ی لایه ی View هست . لایه ی ViewModel صرفا ارتباط بین اون دو لایه را ایجاد میکنه و داده های مورد نیازشون را منتقل میکنه .
اون بخشی از این متد (و هر متد دیگه) را که مربوط به کار با کنترل هست را به لایه ی View و اون بخشی که مربوط به محاسبات منطق تجاری هست (و اگه وجود داره) را به لایه ی Model تون منتقل کنید .
در لایه ی ViewModel ، فقط اطلاعات مورد نیاز را بین اون دولایه منتقل کنید .
همچنین بجای اینکه اینترفیسِ INotifyPropertyChanged را برای ViewModel تون پیاده سازی کنید ، همونطور که دوستمون اشاره کردن ، میتونید کمپوننت MvvmLight را نصب کنید و از کلاس ViewModelBase ارث بری کنید . و متد RaisePropertyChanged را فقط فراخونی کنید .