gpt4 book ai didi

c# - WPF View 模型 GC

转载 作者:行者123 更新时间:2023-11-30 16:07:42 25 4
gpt4 key购买 nike

我有一个 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 运行时,它包含对 MainViewModel 中的 dialogViewModel引用

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

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

关于c# - WPF View 模型 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com