我有一个包含少量项目的GridView。我希望我的用户能够通过点击它们来选择项目。但是,如果他们单击或拖动GridView背景,即在项目上,那么我希望事件传递到下面的控件。
如果我设置了MyGridView.IsHitTestVisible = false,那么我可以操作网格下面的项目但是我无法选择我的网格项目。在ItemTemplate上设置IsHitTestVisible = true没有帮助。
我该怎么做?
答案 0 :(得分:0)
将GridView
的{{1}}绑定到您的ViewModel(您正在使用Mvvm,对吧?)。然后,在与项目的交互中,将ViewModel的SelectedItem
设置为所述项目的SelectedItem
。要执行此操作,请在DataContext
中创建Button
,然后将ItemTemplate
绑定到ViewModel,并将Command
绑定到CommandParameter
。
如果使用Mvvm Light的RelayCommand,它会是这样的:
在ViewModel中:
DataContext
在你的ItemTemplate中:
private Item _selectedItem;
public Item SelectedItem
{
get { return _selectedItem; }
set { _selectedItem = value; RaisePropertyChanged("SelectedItem"); }
}
public RelayCommand<Item> SetSelectedItemCommand
{
get;
private set;
}
private void _setSelectedItem(Item item)
{
SelectedItem = item;
}
//Constructor
public ViewModel()
{
SetSelectedItemCommand = new RelayCommand<Item>(item => _setSelectedItem(item));
}
在GridView中:
<Button Command="{Binding MyVM.SetSelectedItemCommand, Source={StaticResource Locator}}"
CommandParameter="{Binding}">
<!--Whatever else you want to show in your item-->
</Button>
你需要进一步设置<GridView SelectedItem="{Binding MyVM.SelectedItem, Source="{StaticResource Locator}}"
...
</GridView>
的样式,以删除额外的边界和填充等。不太难,应该有很多关于如何做到这一点的其他指南。
希望这有助于编码!