我在ViewModel中有一个 NavigateToAccountsCommand RelayCommand属性。当我将相同的页面上的按钮绑定到ListView外的任何位置时,命令绑定正在运行。但是,只要我将其移动到ListView的DataTemplate,它就无法正常工作。
我已尝试将绑定从 NavigateToAccountsCommand 更改为 DataContext.NavigateToAccountsCommand 仍无效。
感谢您的帮助......
<Page
x:Class="FinancePRO.App.Views.AccountsView"
DataContext="{Binding AccountsViewModel, Source={StaticResource MainViewModelLocator}}"
mc:Ignorable="d">
<Grid>
<!--**This one is working**-->
<Button Command="{Binding NavigateToAccountsCommand}" >
<!--**This one is not working**-->
<ListView ItemsSource="{Binding AllAccounts}" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding AccountName}"/>
<Button Command="{Binding NavigateToAccountsCommand}">
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
答案 0 :(得分:12)
当您在DataTemplate
的{{1}}内时,您的数据上下文是ListView的ListView
的当前项。由于在ItemsSource
'每个单独元素中没有任何名为“NavigateToAccountsCommand
”的属性,因此绑定无效。
要解决此问题,您需要引用AllAcounts
外部的内容;以下应该工作。它更改绑定以引用应该可以访问属性DataTemplate
的根网格DataContext
。要引用网格,您必须添加Name属性,然后使用NavigateToAccountsCommand
绑定。
ElementName
答案 1 :(得分:3)
您可以使用
<Button x:Name="cmdTabItemCloseButton"
Style="{StaticResource TabItemCloseButtonStyle}"
Grid.Column="1" Margin="15,0,0,0"
Command="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type ListView}},
Path=DataContext.NavigateToAccountsCommand}"
CommandParameter="{Binding}"/>
答案 2 :(得分:-1)
我有一个类似的问题(Win RT),我通过使用:
解决了 <GridView
x:Name="itemGridView"
ItemClick="ItemView_ItemClick"
IsItemClickEnabled="True"/>
然后在Page class:
private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
//e is the object being clicked
}