我在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,但我认为它会起作用。
答案 0 :(得分:0)
您无法从datatemplate按名称绑定到元素。尝试绑定到应用程序范围的资源(单线程/定位器模式)或使用{RelativeSource Mode = TemplatedParent}。