绑定导致我的viewmodel保留在内存中

时间:2015-04-21 21:36:07

标签: c# wpf mvvm combobox

我有一个窗口,我从主窗口打开就像这样

Views.VTestWindow searchViewTest = new VTestWindow(myUser.UserID);
searchViewTest.Closed += SearchViewTest_Closed;
searchViewTest.DataContext = searchContext;
searchViewTest.ShowDialog();

我在viewModel绑定的视图中有几个控件。给我胃灼热的是一个组合框。我将selectedIndex绑定到我的VM上的属性。如果我删除了那个绑定,我的探查器说VM被处理掉了。但是,如果我在那里绑定并且comboBox被打开(不必更改选择),则探查器说我的VM在调用dispose后仍然存在。 ComboBox代码

<ComboBox Width="150" MinHeight="25" SelectedIndex="{Binding SelectedSearchBy}">
      <ComboBox.Items>
        <ComboBoxItem Content="Order Number" />
        <ComboBoxItem Content="Recent Orders" />
        <ComboBoxItem Content="Account (Not Shipped)" />
        <ComboBoxItem Content="Account (Shipped)" />
        <ComboBoxItem Content="Account (All)" />
        <ComboBoxItem Content="Account (Cancelled)" />
        <ComboBoxItem Content="Express" />
        <ComboBoxItem Content="Status" />
        <ComboBoxItem Content="Needs To Be Released" />
      </ComboBox.Items>
</ComboBox>

有谁能告诉我为什么会发生这种情况或者更好但我会如何修复它?我仔细检查以确保我没有任何事件处理程序仍在使用中。清除VM将使用的所有列表。 我的应用程序相当大,我看到内存使用崩溃,所以我试图找到可以导致内存问题的每一件小事。

这是我接近我的窗口

void SearchViewTest_Closed(object sender, EventArgs e)
{
    VTestWindow searchViewTest = sender as VTestWindow;
    searchViewTest.Closed -= SearchViewTest_Closed;
    VmOrderSearch searchContext = searchViewTest.DataContext as VmOrderSearch;
    //Do Stuff here

    searchContext.Dispose();
    searchViewTest.DataContext = null;
    searchViewTest = null;
}

1 个答案:

答案 0 :(得分:0)

尝试将此代码行添加到适当的位置:

searchViewTest.Closed -= SearchViewTest_Closed;