Я создаю приложение WPF с использованием инфраструктуры MVVM Light.
Я пытаюсь открыть окно и передать некоторую информацию, например объект, в эту вновь созданную ViewModel.
У меня есть окно WPF (MainListView
/ MainListViewModel
), которое имеет ListBox
, связанный со списком объектов:
<ListBox ItemsSource="{Binding Selected_Agent.Associated_Letter, Mode=OneWay}"
SelectedItem="{Binding Selected_Letter, Mode=TwoWay}">
<!-- More code below -->
В MainListView
У меня также есть кнопка, связанная с командой:
<Button Content="Update" Command="{Binding UpdateCommand}"/>
private ICommand _updateCommand;
public ICommand UpdateCommand
{
get
{
if (_updateCommand == null)
{
_updateCommand = new RelayCommand(_windowService.OpenWindow<AddNewLetterView>, UpdateCommand_CanExecute());
Messenger.Default.Send(new UpdateLetterMessage() { Letter = Selected_Letter });
}
return _updateCommand;
}
}
Откроется новое окно, AddNewLetterView
с использованием AddViewLetterViewModel
, которое связано с ViewModelLocator
.
в AddNewLetterViewModel
конструкторе MVVM Light. this:
public AddNewLetterViewModel()
{
Messenger.Default.Register<UpdateLetterMessage>(this, UpdateLetterMessageReceived);
}
Проблема в том, что это сообщение не получено. Точка останова на UpdateLetterMessageReceived
никогда не срабатывает, даже если открывается вид.
Если я ставлю точку останова на моей команде, она никогда не срабатывает, и ни одна не UpdateLetterMessageReceived
на AddNewLetterViewMdoel
, когда кнопка нажата, даже если AddNewLetterView
открыт.
Кажется, что происходит то, что UpdateCommand вызывается один раз во время создания экземпляра MainListViewModel, что означает, что Messenge отправляется до создания экземпляра AddNewLetterViewModel
.
Это правильно? Если да, как я могу убедиться, что мое сообщение отправляется при вызове команды?
Если нет, что здесь происходит и как я могу этого добиться?