0

我在 GridView 的项目模板中有一个按钮,当单击该按钮时,该按钮使用命令绑定调用 ViewModel 上的方法。ViewModel 永远不会被释放。模板:

<DataTemplate x:Key="ItemTemplate">

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

</DataTemplate>

如果我删除了 Command 属性,或者如果我在 ViewModel 中注释掉公共属性(即从不设置 BTW):

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

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

编辑:

我想出的一个解决方案是建立一个广播系统。我的 ViewModel 将在 OnNavigatedTo 中注册这个单例(并在 OnNavigatedFrom 中取消注册)。Command 绑定现在将通过项目的上下文。我会在项目中放置一个 ICommand 属性,该属性在触发时会将自身传递给广播系统。然后广播系统会将消息传递给 ViewModel。感觉有点hacky,但我认为它会起作用。

4

1 回答 1

0

您不能从数据模板中按名称绑定到元素。尝试绑定到应用程序范围的资源(单音/定位器模式)或使用 {RelativeSource Mode=TemplatedParent}。

于 2013-01-22T11:12:48.943 回答