我正在尝试使用Caliburn micro了解和实现EventAggregator。我是MVVM的新学生。我的目标:我想创建一个窗口/弹出窗口,用于更新客户。我想使使用同一窗口从不同用户控件更新客户成为可能。我在这里可能完全不合时宜,所以请原谅我缺乏知识。
我的活动类别:
private CustomerModel _selectedCustomer;
public SelectedCustomerEvent(CustomerModel selectedCustomer)
{
_selectedCustomer = selectedCustomer;
}
public CustomerModel SelectedCustomer { get { return _selectedCustomer; } }
我用来更新客户的弹出窗口/窗口:
private IEventAggregator _events;
public CustomerUpdateViewModel(IEventAggregator events)
{
_events = events;
_events.Subscribe(this);
}
public void Handle(SelectedCustomerEvent message)
{
Customer = message.SelectedCustomer;
}
public CustomerModel Customer { get; private set; }
将打开窗口以更新客户的UserControl之一:
private IEventAggregator _events;
public CustomerViewModel(IEventAggregator events)
{
_events = events;
_events.Subscribe(this);
}
..........
private CustomerModel _selectedCustomer;
public CustomerModel SelectedCustomer
{
get { return _selectedCustomer; }
set
{
_selectedCustomer = value;
NotifyOfPropertyChange(() => SelectedCustomer);
_events.PublishOnUIThread(new SelectedCustomerEvent(SelectedCustomer));
}
}
public void UpdateCustomer()
{
WindowManager wm = new WindowManager();
CustomerUpdateViewModel cn = new CustomerUpdateViewModel();
wm.ShowWindow(cn);
}
我现在的问题是,在“ new CustomerUpdateViewModel()”上出现错误,提示:没有给出与CustomerUpdateViewModel(IEventAggregator)的所需形式参数“事件”相对应的参数。
我知道了。它不是eventaggregator的问题,而是导航的问题。我需要像这样将WindowManager和ViewModel放在构造函数中:
public CustomerViewModel(IEventAggregator events, IWindowManager windowManager, CustomerUpdateViewModel customerUpdateVM)
{
_windowManager = windowManager;
_customerUpdateVM = customerUpdateVM;
_events = events;
_events.Subscribe(this);
}
并更改打开窗口的方法:
public void UpdateCustomer() => _windowManager.ShowDialog(_customerUpdateVM);