2011-10-24 44 views
4

我正在使用MVVM模式的WPF 4。我有一个TabControl - 它看起来像:WPF命令 - 内存泄漏

<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 =“{结合}”持有强引用当前显示的视图/视图模型。我如何删除该命令?换句话说:我需要一种方法,只通过引用TabControl.ContentTemplate(ViewModel和View)从ItemTemplate中删除Button Command。类似经历的项目,找到该项目,删除命令

感谢 迈克尔

+5

如何发现该命令导致内存泄漏? – sll

回答

1

我认为你正在寻找错误的问题。这不是保持ViewModel存活的Binding。这是整个TabControl和它绑定的集合。

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

+0

如果我删除CommandParameter它的作品 - 收集ViewModel/View。我想要达到的目标:使用MVVM关闭标签。 MainWindow是我的Shell,它具有方法“ScreenCloseCommand”。此方法询问屏幕(通过CommandParameter传递)是否可以关闭(“CanClose”)。然后我将它从TabControl绑定的ObservableList中删除 - 因此它消失...但由于绑定循环引用仍然活着从Button绑定命令 - > leak(imo):-( – user1011524

+0

)您是对的。你说过,泄漏确实发生,但我不知道如何摆脱它。 – svick