我有一个 GridView,其中包含少量项目。我希望我的用户能够通过单击来选择项目。但是,如果他们单击或拖动 GridView 背景,即在一个项目上,那么我希望事件传递到下面的控件。
如果我设置 MyGridView.IsHitTestVisible = false 那么我可以操作网格下方的项目,但我无法选择我的网格项目。在 ItemTemplate 上设置 IsHitTestVisible = true 没有帮助。
我怎样才能做到这一点?
我有一个 GridView,其中包含少量项目。我希望我的用户能够通过单击来选择项目。但是,如果他们单击或拖动 GridView 背景,即在一个项目上,那么我希望事件传递到下面的控件。
如果我设置 MyGridView.IsHitTestVisible = false 那么我可以操作网格下方的项目,但我无法选择我的网格项目。在 ItemTemplate 上设置 IsHitTestVisible = true 没有帮助。
我怎样才能做到这一点?
GridView
将's绑定SelectedItem
到您的 ViewModel(您使用的是 Mvvm,对吗?)。然后,在与项目交互时,SelectedItem
将 ViewModel 的设置DataContext
为所述项目的。为此,请在Button
您的.ItemTemplate
Command
CommandParameter
DataContext
如果使用 Mvvm Light 的 RelayCommand,它会是这样的:
在您的视图模型中:
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));
}
在您的 ItemTemplate 中:
<Button Command="{Binding MyVM.SetSelectedItemCommand, Source={StaticResource Locator}}"
CommandParameter="{Binding}">
<!--Whatever else you want to show in your item-->
</Button>
在您的 GridView 中:
<GridView SelectedItem="{Binding MyVM.SelectedItem, Source="{StaticResource Locator}}"
...
</GridView>
您需要进一步设置样式Button
以删除额外的边框和填充等。不要太难,应该有很多其他指南来说明如何做到这一点。
希望这对编码有所帮助和快乐!