WPF命令 - 内存泄漏

4

我是用使用MVVM模式的WPF 4。我有一个TabControl - 它看起来像这样:

 <TabControl x:Name="Items" ItemsSource="{Binding Screens}" 
                            SelectedItem="{Binding ActiveScreen}">
   <TabControl.ItemTemplate>
     <DataTemplate>
       <ContentControl>
            <Button Command="{Binding 
                              DataContext.ScreenCloseCommand, 
                              ElementName=MainWindow}" 
                    CommandParameter="{Binding}">X</Button>
       </ContentControl>
     </DataTemplate>
   </TabControl.ItemTemplate>

问题在于,CommandParameter="{Binding}" 持有当前显示的View/ViewModel的强引用。我该如何移除该命令?换句话说:我需要一种方法来通过只拥有TabControl.ContentTemplate(ViewModel和View)的引用来移除ItemTemplate中的按钮命令。比如遍历项目、查找项目、移除命令...
谢谢 Michael

5
你是如何发现那个命令会导致内存泄漏的? - sll
1个回答

1

我认为你正在看错问题。它不是Binding使ViewModel保持活动状态,而是整个TabControl和它绑定的集合。

如果你描述了你试图解决的实际问题,而不是你无法成功使用的解决方案,我们可能会更好地帮助你。


如果我删除CommandParameter,它就能正常工作 - ViewModel / View会被收回。我试图实现的目标是:使用MVVM创建可关闭选项卡。MainWindow是我的Shell,它有一个名为"ScreenCloseCommand"的方法。该方法询问屏幕(通过CommandParameter传递)是否可以关闭("CanClose")。然后我将其从绑定的ObservableList中移除 - 所以它消失了...但由于绑定循环,仍然存在来自Button绑定命令的引用->泄漏(在我看来):-( - user1011524
你说得对。在你描述的情况下,确实存在内存泄漏问题。不过,我对如何解决它一无所知。 - svick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接