-1

我正在尝试学习 MVVM Pattern 使用 WPF 做一个简单的 GUI。它只是一个简单的Autocad插件,带有一个显示模型信息的模态窗口。

我有两个带有各自视图和视图模型的用户控件。我在单个窗口/对话框中显示这些用户控件。其中一个用户控件需要显示一些信息,在 DataGrid 中表示一个简单的列表(模型)。

就像我之前说的,该用户控件的模型是一个现有的列表。我需要将列表信息传递给视图模型,但我正在为此苦苦挣扎。我正在考虑将它作为参数传递给 MainWindow 构造函数,然后传递给相应的视图模型,但听起来不是一个好主意。

在这种情况下我有什么选择?

我正在使用 MVVM 工具包。

谢谢!

4

1 回答 1

1

您可以使用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));

请参阅文档以获取更多信息。

于 2021-12-16T15:59:46.763 回答