0

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

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

我怎样才能做到这一点?

4

1 回答 1

0

GridView将's绑定SelectedItem到您的 ViewModel(您使用的是 Mvvm,对吗?)。然后,在与项目交互时,SelectedItem将 ViewModel 的设置DataContext为所述项目的。为此,请在Button您的.ItemTemplateCommandCommandParameterDataContext

如果使用 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以删除额外的边框和填充等。不要太难,应该有很多其他指南来说明如何做到这一点。

希望这对编码有所帮助和快乐!

于 2013-05-22T23:33:38.023 回答