DataContext中未使用命令绑定发布DataContext

时间:2013-01-22 10:55:03

标签: c# xaml memory memory-leaks windows-store-apps

我在GridView的项目模板中有一个按钮,当单击按钮时,它使用Command绑定调用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,但我认为它会起作用。

1 个答案:

答案 0 :(得分:0)

您无法从datatemplate按名称绑定到元素。尝试绑定到应用程序范围的资源(单线程/定位器模式)或使用{RelativeSource Mode = TemplatedParent}。