我正在尝试学习MVVM模式,用WPF做一个简单的GUI。这只是一个简单的Autocad插件,它有一个显示模型信息的模式窗口。
我有两个用户控件,它们分别具有视图和视图模型。我在一个窗口/对话框中显示这些用户控件。其中一个用户控件需要显示一些信息,表示DataGrid中的一个简单列表(模型(。
正如我之前所说,该用户控件的模型是一个现有的List。我需要将列表信息传递给视图模型,但我很难做到这一点。我想把它作为一个参数传递给MainWindow构造函数,然后再传递给相应的视图模型,但这听起来不是一个好主意。
在这种情况下,我有什么选择?
我正在使用MVVM工具包。
谢谢!
您可以使用WeakReferenceMessenger
/StrongReferenceMessenger
将消息从一个视图模型发送到另一个:
// Create a message
public class LoggedInUserChangedMessage : ValueChangedMessage<User>
{
public LoggedInUserChangedMessage(User user) : base(user)
{
}
}
// Register a message in some module
WeakReferenceMessenger.Default.Register<LoggedInUserChangedMessage>(this, (r, m) =>
{
// Handle the message here, with r being the recipient and m being the
// input message. Using the recipient passed as input makes it so that
// the lambda expression doesn't capture "this", improving performance.
});
// Send a message from some other module
WeakReferenceMessenger.Default.Send(new LoggedInUserChangedMessage(user));
有关详细信息,请参阅文档。