【问题标题】:Windows 8 - GridView does not return SelectedItem when a button inside an item is clickedWindows 8 - 单击项目内的按钮时,GridView 不返回 SelectedItem
【发布时间】:2013-01-26 17:43:38
【问题描述】:

我正在开发一个 Win8 Metro 应用程序。我正在使用 GridView。在 GridView 的 ItemTemplate 中,我有 3 个按钮(Button1、Button2、Button3)。因此,在我的屏幕上,如果我一次有 5 个 GridView 项,那么我将看到 5x3 = 15 个按钮。

问题是,如果单击这些按钮中的任何一个,我将无法跟踪父 GridView 项。

在 GridView 的属性中,有“SelectedIndex”(或 SelectedItem)属性。但是,它的值是在单击 GridView 项目时设置的(而不是在单击 GridViewItem 内的按钮时)。因此,单击按钮时,SelectedIndex 保持为 -1。

如何在 ButtonClick 上找出谁是此按钮的父项?

【问题讨论】:

  • 你想要网格视图项,还是绑定到它的数据项?
  • 也许是的。我想在按钮的点击代码中引用网格视图项的 ID。

标签: xaml gridview windows-8


【解决方案1】:

通过阅读您在 cmets 中的回复,您似乎想要获取对基础数据项而不是网格项本身的引用。在这种情况下,请在您的按钮单击处理程序中执行以下操作...

Void Button_Click(sender, e)
{
    var btn = (Button)sender;
    var dc = btn.DataContext as MyBoundType;  // don't forget to check for null!
    var itemId = dc.Id; // assuming your object has an Id field
}

【讨论】:

  • 美丽...正是我想要做的。 btn.DataContext 将拯救我的生命。
【解决方案2】:

将按钮的CommandParameter 绑定到父项,如下所示:

<Button 
    Command="{Binding RemoveCommand}"
    CommandParameter="{Binding RelativeSource=
        {RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 
    />

【讨论】:

  • WinRT 不支持 AncestorType
  • 亲爱的 mydogisbox,这与 Win8 XAML 有关吗?我收到错误:成员“AncestorType”无法识别或无法访问
  • 顺便说一句,我正在为 x86 编译它,结果相同。
  • 啊,对不起。这是 wpf 的保留。我检查了CommandParameter 仍然存在,但不是FindAncestor。请改用TemplatedParent"Binding RelativeSource={TemplatedParent}"我认为这应该得到项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多