2013-01-22 39 views
0

我在GridView中的项目模板中有一个按钮,该按钮使用Command绑定在单击按钮时调用ViewModel上的方法。 ViewModel从未发布。模板:未在DataTemplate中使用命令绑定发布DataContext

<DataTemplate x:Key="ItemTemplate"> 

     <Button HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,0,0,0" 
              Command="{Binding ElementName=LayoutRoot, Path=DataContext.NavigateToOtherPageCommand}"/> 

</DataTemplate> 

如果我删除命令属性或如果我注释掉公共财产(即从未BTW)在视图模型:

// public ICommand NavigateToOtherPageCommand { get; private set; } 

没有泄漏。任何帮助,将不胜感激!

编辑:

一个解决方案,我想出了是把广播系统到位。我的ViewModel将在OnNavigatedTo中注册此单例(并在OnNavigatedFrom中取消注册)。命令绑定现在将转到该项目的上下文。我会在项目中放置一个ICommand属性,这个属性在发射时会传递给广播系统。然后广播系统将消息传递给ViewModel。感觉有点哈克,但我认为它会起作用。

+0

指http://stackoverflow.com/questions/5927433/silverlight-datatemplate-memory-leak – daryal

+0

不知道如何与 –

回答

0

您无法通过datatemplate中的名称绑定元素。尝试绑定到应用程序范围的资源(singletone/locator模式)或使用{RelativeSource Mode = TemplatedParent}。

+0

当你说:“你不能”,你的意思是“你不应该到“(以免造成泄漏)...因为命令绑定正在工作...... –

相关问题