我有一个窗口,我从主窗口打开就像这样
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;
}
答案 0 :(得分:0)
尝试将此代码行添加到适当的位置:
searchViewTest.Closed -= SearchViewTest_Closed;