8

我在 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>
4

3 回答 3

12

当您在DataTemplate中时ListView,您的数据上下文是 ListView 中的当前项ItemsSource。由于每个单独的元素中没有任何称为“ NavigateToAccountsCommand”的属性AllAcounts,因此绑定不起作用。

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

    <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>
于 2013-10-28T23:20:19.260 回答
4

您可以使用

<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}"/>
于 2013-10-29T06:21:21.570 回答
-1

我有一个类似的问题(Win RT),我通过使用解决了这个问题:

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

然后在 Page 类中:

    private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
    {
        //e is the object being clicked
    }
于 2014-11-01T02:37:45.487 回答