C# 如何将listviewitem中的按钮绑定到Winrt中ViewModel中的命令

C# 如何将listviewitem中的按钮绑定到Winrt中ViewModel中的命令,c#,mvvm,winrt-xaml,C#,Mvvm,Winrt Xaml,我在ViewModel中有一个NavigateToAccountsCommandRelayCommand属性。当我将其绑定到页面上ListView之外的任何位置的按钮时,命令绑定正在工作。但是,一旦我将其移动到ListView的DataTemplate,它就不起作用了 我已尝试将绑定从NavigateToAccountsCommand更改为DataContext。NavigateToAccountsCommand仍不工作 谢谢你的帮助 <Page x:Class="FinancePRO.A

我在ViewModel中有一个NavigateToAccountsCommandRelayCommand属性。当我将其绑定到页面上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>

当您在
列表视图的
数据模板
中时,您的数据上下文是列表视图的
项资源
的当前项。由于在
allaccounts
”每个元素中都没有名为“
NavigateToAccountsCommand
”的属性,因此绑定不起作用

要解决这个问题,您需要从
DataTemplate
外部引用一些内容;下面的方法应该有效。它将绑定更改为引用根网格的
DataContext
,该网格应具有可访问的属性
NavigateToAccountsCommand
。要引用网格,必须添加Name属性,然后使用
ElementName
binding

    <Grid Name="Root">
          <!--**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 ElementName=Root, Path=DataContext.NavigateToAccountsCommand}">
                                    </Button>
                    </DataTemplate>
                </ListView.ItemTemplate>
        </ListView>
   </Grid>

您可以使用

<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}"/>

我遇到了一个类似的问题(Win RT),我只使用以下方法解决了这个问题:

    <GridView
        x:Name="itemGridView"
        ItemClick="ItemView_ItemClick"
        IsItemClickEnabled="True"/>

感谢loopedcode的及时响应。这就解决了我的问题。谢谢你的及时回复。这在普通WPF应用程序中有效,但在WInRT应用程序中不起作用。谢谢你。
    private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
    {
        //e is the object being clicked
    }