将CommandParameter绑定到GridView的SelectedItem

时间:2015-02-12 14:38:57

标签: xaml gridview mvvm winrt-xaml

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

我正在使用MVVM并拥有Prims的DelegateCommand:

public DelegateCommand<Route> ShowRouteDetailsCommand { get; private set; }

此命令在构造函数中初始化:

this.ShowRouteDetailsCommand = new DelegateCommand<Route>(this.ShowRouteDetails);

导航由Prisms导航服务完成:

private void ShowRouteDetails(Route route)
{
    this.NavigationService.Navigate(PageNames.RouteDetails, route.Id);
}

路线显示在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" />

我的问题是,ShowRouteDetails的参数总是空的。如果我尝试使用GridViews SelectedValue或SelectedItem属性,那就无所谓了。

我知道我可以轻松添加SelectedRoute属性,将SelectedItem绑定到它并在ShowRouteDetails中使用它,但这对我来说似乎很脏。

1 个答案:

答案 0 :(得分:0)

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

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