我有一个 ViewModel,它在从模型接收事件时,通过更新对话框的 ViewModel 并将其传递给对话框进行数据绑定(bind),向用户显示一个对话框,即,
public class MainViewModel
{
...
private void OnModelRaisedEvent(object sender, EventArgs e)
{
DialogViewModel dialogViewModel = new DialogViewModel();
Window dialog = new DialogView(dialogViewModel);
dialog.ShowDialog();
}
}
在对话框的 View 中,我点击按钮关闭窗口,即
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 还没有启动。
最佳答案
实际上,您现在确实有依赖项注入(inject),因为您通过构造函数将 View 模型注入(inject)到对话框中。
当对话框 View 运行时,它包含对 dialogViewModel
中的 MainViewModel
的引用。
当您关闭对话框时,控制权返回给 OnModelRaisedEvent
方法,然后该方法立即结束(dialog.ShowDialog()
之后没有其他代码)并且 GC 收集变量 dialogViewModel
,因为它的范围仅限于该方法。
因此,最重要的是:您应该能够毫无问题地使用您的代码。
关于c# - WPF View 模型 GC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30401114/