我使用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中使用它,但这对我来说似乎很脏。
答案 0 :(得分:0)
为什么不在viewModel中创建一个var并将其绑定到gridView的SelectedItem?这样,当您运行该命令时,您只需要读取该变量的值。
<GridView x:Name="RouteGrid" ItemsSource="{Binding Routes}"
SelectionMode="Single" SelectedItem="{Binding myVar}">
<GridView.ItemTemplate>
<DataTemplate>