如何在禁用IsHitTestVisible时选择gridview中的项目

时间:2013-05-20 09:36:39

标签: xaml windows-8 windows-runtime

我有一个包含少量项目的GridView。我希望我的用户能够通过点击它们来选择项目。但是,如果他们单击或拖动GridView背景,即在项目上,那么我希望事件传递到下面的控件。

如果我设置了MyGridView.IsHitTestVisible = false,那么我可以操作网格下面的项目但是我无法选择我的网格项目。在ItemTemplate上设置IsHitTestVisible = true没有帮助。

我该怎么做?

1 个答案:

答案 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> 的样式,以删除额外的边界和填充等。不太难,应该有很多关于如何做到这一点的其他指南。

希望这有助于编码!