【发布时间】:2018-09-13 22:08:47
【问题描述】:
我正在使用视图模型中的数据列表填充网格。但我无法从网格中选择一个项目。各位大神帮忙看看。
<StackPanel Margin="0,69,0,0">
<GridView ItemsSource="{Binding GamesList}" x:Name="gameGrid" >
<GridView.ItemTemplate>
<DataTemplate>
<Button Tag="{Binding Source}" Command="{Binding Path=DataContext.GameSelectionMethod, ElementName=gameGrid}"
CommandParameter="{Binding SelectedValue}" >
<StackPanel Width="202" VerticalAlignment="Top">
<Image Source="{Binding imageurl}" Height="324"/>
<StackPanel Background="Black" Padding="19,9,0,0">
<TextBlock FontWeight="Semibold" TextTrimming="CharacterEllipsis" FontFamily="Segoe Pro"
Foreground="White" TextAlignment="Left" FontSize="24" Text="{Binding title}"
TextWrapping="Wrap" Height="65"/>
<TextBlock FontFamily="Segoe Pro" Foreground="White" TextAlignment="Left"
FontSize="16" Text="{Binding price}" Margin="0,48,0,0"/>
</StackPanel>
</StackPanel>
</Button>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</StackPanel>
我需要在这个按钮中有一个点击事件,并且需要知道选择了哪一个。我尝试了很多方法,但实际上一切都是复杂的解决方案。我添加了一个命令并且它没有触发。它可以在鼠标单击上工作,但不能在 xbox 的游戏手柄上工作
我的视图模型
public List<GameModel> GamesList
{
get
{
return gamesList;
}
set
{
gamesList = value;
OnPropertyChanged("GamesList");
}
}
public void GetSampleData()
{
var data = new GameModel { gameId = 1, title = "Call Of Duty: Black Ops 4", price = "$59.99", imageurl = "/Assets/Product Image-7.png" };
GamesList.Add(data);
var data1 = new GameModel { gameId = 2, title = "Forza Horizon 4", price = "$59.99", imageurl = "/Assets/Product Image-8.png" };
GamesList.Add(data1);
var data2 = new GameModel { gameId = 3, title = "Halo 5: Guardians", price = "$59.99", imageurl = "/Assets/Product Image-9.png" };
GamesList.Add(data2);
var data3 = new GameModel { gameId = 4, title = "Sea of Thieves", price = "$59.99", imageurl = "/Assets/Product Image-10.png" };
GamesList.Add(data3);
var data4 = new GameModel { gameId = 5, title = "Assassin's Creed : Origins", price = "$59.99", imageurl = "/Assets/Product Image-11.png" };
GamesList.Add(data4);
var data5 = new GameModel { gameId = 6, title = "Shadow of War", price = "$59.99", imageurl = "/Assets/Product Image-12.png" };
GamesList.Add(data5);
GamesList.Add(data10);
}
public ICommand GameSelectionMethod
{
get
{
return new DelegateCommand(GameSelection);
}
}
private void GameSelection()
{
string tag = "1";
var parameters = new GameModel();
parameters.gameId = Convert.ToInt16(tag);
_navigationService.Navigate(typeof(HomeView), parameters);
}
【问题讨论】:
-
你也可以发布你的 ViewModel 吗?
-
我已经用 viewmodel 更新了这个问题。
-
你在 GameSelection() 方法中做了什么,为什么标签总是“1”,如果你总是希望它为 int,为什么将它初始化为字符串?
-
我能够通过将我的网格视图单击启用为 true 来找到解决方案。感谢您的帮助。