WPF 视图模型 GC

WPF ViewModel GC

我有一个 ViewModel,它在从模型接收事件时,通过更新对话框的 ViewModel 并将其传递给对话框进行数据绑定,向用户显示一个对话框,即

public class MainViewModel
{
    ...
    private void OnModelRaisedEvent(object sender, EventArgs e)
    {
        DialogViewModel dialogViewModel = new DialogViewModel();
        Window dialog = new DialogView(dialogViewModel);
        dialog.ShowDialog();
    }
 }

在对话框的视图中,我挂入一个按钮单击以关闭 window,即

public class DialogView : Window
{
    public DialogView(DialogViewModel viewModel)
    {
        InitializeComponent();
        Loaded += (s,e) => {DataContext = viewModel; };
    }

    ...

    private void ButtonOnClick(object sender, RoutedEventArgs e)
    {
        Close();
    }
 }

由于只有 DialogView 使用 DialogViewModel,我可以确信我不会在这里发生内存泄漏吗?

例如,如果我多次打开和关闭对话框,DialogViewModel 是否会在 DialogView 关闭时进行 GC,以免累积 DialogViewModel 的多个实例。在任务管理器中查看内存使用情况,多次打开和关闭 DialogView 时确实会上升,但不确定这是不是因为 GC 尚未启动。

实际上,您现在确实有依赖注入,因为您正在通过构造函数将视图模型注入到对话框中。

虽然对话框视图是 运行,但它包含对 MainViewModeldialogViewModel 引用

当您关闭对话框时,控制权返回给 OnModelRaisedEvent 方法,紧接着,该方法结束(dialog.ShowDialog() 之后没有其他代码)并且 GC 收集变量 dialogViewModel,因为它的范围仅限于该方法。

所以,底线是:您应该能够毫无问题地使用您的代码。