【发布时间】:2020-03-16 11:54:47
【问题描述】:
我正在使用 MVVM Light 框架构建 WPF 应用程序。
我正在尝试打开一个窗口并将一些信息(即一个对象)传递给这个新创建的 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,它由 MVVM Light 的 ViewModelLocator 链接。
在AddNewLetterViewModel 构造函数中我这样做:
public AddNewLetterViewModel()
{
Messenger.Default.Register<UpdateLetterMessage>(this, UpdateLetterMessageReceived);
}
问题是没有收到此消息。即使视图打开,UpdateLetterMessageReceived 上的断点也不会被命中。
如果我在命令上设置断点,则在单击按钮时,它永远不会被命中,AddNewLetterViewMdoel 上的 UpdateLetterMessageReceived 也不会被命中,即使 AddNewLetterView 已打开。
似乎正在发生的事情是在 MainListViewModel 实例化期间调用了一次 UpdateCommand,这意味着在实例化 AddNewLetterViewModel 之前发送了消息。
正确吗?如果是这样,我如何确保在调用命令时发送我的消息?
如果没有,这里发生了什么,我该如何实现?
【问题讨论】:
标签: wpf mvvm mvvm-light