Xaml 将CommandParameter绑定到GridView的SelectedItem

Xaml 将CommandParameter绑定到GridView的SelectedItem,xaml,gridview,mvvm,winrt-xaml,Xaml,Gridview,Mvvm,Winrt Xaml,我使用一个Windows8应用程序,它在一个页面上显示GridView。当用户选择此网格中的一个项目并单击按钮时,下一页将加载所选项目的详细信息 我正在为此使用MVVM,并从Prims获得一个DelegateCommand: public DelegateCommand<Route> ShowRouteDetailsCommand { get; private set; } 路线显示在GridView中: <GridView x:Nam

我使用一个Windows8应用程序,它在一个页面上显示GridView。当用户选择此网格中的一个项目并单击按钮时,下一页将加载所选项目的详细信息

我正在为此使用MVVM,并从Prims获得一个DelegateCommand:

public DelegateCommand<Route> ShowRouteDetailsCommand { get; private set; }
路线显示在GridView中:

                    <GridView x:Name="RouteGrid"                                  
                              ItemsSource="{Binding Routes}"
                              SelectionMode="Single">
                        <GridView.ItemTemplate>
                            <DataTemplate> ...
该命令当前添加到应用程序栏中,仅用于测试:

 <AppBarButton Command="{Binding ShowRouteDetailsCommand}"
                      CommandParameter="{Binding SelectedValue,
                                                 ElementName=RouteGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      Icon="Forward" />
我的问题是,showRoutedDetails的参数总是空的。无论我是否尝试GridViews SelectedValue或SelectedItem属性,这都无关紧要


我知道我可以很容易地添加SelectedRoute属性,将SelectedItem绑定到该属性,并在ShowRoutedDetails中使用它,但这对我来说似乎有点脏。

为什么不在viewModel中创建一个var并将其绑定到gridView的SelectedItem?这样,当您运行命令时,您只需读取该变量的值

<GridView x:Name="RouteGrid" ItemsSource="{Binding Routes}"
               SelectionMode="Single" SelectedItem="{Binding myVar}">
    <GridView.ItemTemplate>
        <DataTemplate> 

ElementName=RouteGrid,Mode=TwoWay,为什么它是双向的?在没有找到任何解决方案后的纯粹绝望;我建议您做2个更改1-绑定到selecteditem 2-确保网格的名称可以从按钮访问,将它们两个放在堆栈面板中只是为了进行测试。我想,为命令的执行方法提供所需的一切,而不是更改我刚刚拥有的成员变量,这要干净得多,因为绑定不能像我预期的那样工作。或者换一种方式说:你的解决方案就是我目前正在做的,但它没有达到我的期望。
 <AppBarButton Command="{Binding ShowRouteDetailsCommand}"
                      CommandParameter="{Binding SelectedValue,
                                                 ElementName=RouteGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      Icon="Forward" />
<GridView x:Name="RouteGrid" ItemsSource="{Binding Routes}"
               SelectionMode="Single" SelectedItem="{Binding myVar}">
    <GridView.ItemTemplate>
        <DataTemplate>