آموزش WAF (مشاهده تغییرات خواص ViewModel در Controller)
نویسنده: مسعود پاکدل
تاریخ: ۱۳۹۳/۰۱/۱۷ ۹:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class MyController : Controller
{
[ImportingConstructor]
public MyController(MyViewModel viewModel)
{
ViewModelCore = viewModel;
}
public MyViewModel ViewModelCore
{
get;
private set;
}
public void Run()
{
AddWeakEventListener(ViewModelCore , ViewModelCoreChanged)
}
private void ViewModelCoreChanged(object sender , PropertyChangedEventArgs e)
{
if(e.PropertyName=="CurrentItem")
{
}
}
} [Export]
public class BookController
{
[ImportingConstructor]
public BookController(BookViewModel viewModel)
{
ViewModelCore = viewModel;
}
public BookViewModel ViewModelCore
{
get;
private set;
}
public DelegateCommand RemoveItemCommand
{
get;
private set;
}
private void ExecuteRemoveItemCommand()
{
ViewModelCore.Books.Remove(ViewModelCore.CurrentItem);
}
private bool CanExecuteRemoveItemCommand()
{
return ViewModelCore.CurrentItem != null;
}
private void Initialize()
{
RemoveItemCommand = new DelegateCommand(ExecuteRemoveItemCommand , CanExecuteRemoveItemCommand);
ViewModelCore.RemoveItemCommand = RemoveItemCommand;
}
public void Run()
{
var result = new List<Book>();
result.Add(new Book { Code = 1, Title = "Book1" });
result.Add(new Book { Code = 2, Title = "Book2" });
result.Add(new Book { Code = 3, Title = "Book3" });
Initialize();
ViewModelCore.Books = new ObservableCollection<Models.Book>(result);
PropertyChangedEventManager.AddHandler(ViewModelCore, ViewModelChanged, "CurrentItem");
(ViewModelCore.View as IBookView).Show();
}
private void ViewModelChanged(object sender,PropertyChangedEventArgs e)
{
if(e.PropertyName == "CurrentItem")
{
RemoveItemCommand.RaiseCanExecuteChanged();
}
}
} RemoveItemCommand = new DelegateCommand(ExecuteRemoveItemCommand , CanExecuteRemoveItemCommand);
PropertyChangedEventManager.AddHandler(ViewModelCore, ViewModelChanged, "CurrentItem");
بعد از انتخاب یکی از گزینه و فراخوانی مجدد متد CanExecuteRemoveItemCommand دکمه مورد نظر فعال میشود:
و در نهایت دکمه RemoveItem فعال خواهد شد: