【问题标题】:ListBox SelectedIndex is always -1ListBox SelectedIndex 始终为 -1
【发布时间】:2011-07-14 06:27:32
【问题描述】:

我有一个带有按钮和文本块的列表框作为 ItemTemplate。按钮有一个onClick 事件。

我想要的只是获取点击项的索引,但我的 ListBox 中的SelectedIndex 属性始终为-1!

如何获取点击项的索引?

【问题讨论】:

    标签: windows-phone-7 listbox selectedindex


    【解决方案1】:

    问题在于 Button 控件正在吞噬鼠标事件以提供 Click 行为,因此 ListBox 永远不会收到任何事件来告诉它选择已更改。

    正如@Alexander 建议的那样,您可以使用带有命令的 MVVM 样式方法来处理视图模型中的操作并将数据上下文作为参数传递。

    或者,您可以将 Button 替换为任何其他布局控件,并使用 Silverlight Toolkit 中的手势服务或使用常规 MouseLeftButtonUp 事件。在任何一种情况下,鼠标事件都会冒泡并允许 ListBox 处理选择。

    【讨论】:

    • 谢谢你很配!我只是删除 Button,并使用相同的代码创建 SelectionChanged 事件)我是 C# 和开发中的新手,所以它对我来说是最简单的方式)
    【解决方案2】:

    你可能想在你的列表框中实际选择一些东西:p

    【讨论】:

      【解决方案3】:

      如果要获取与当前 ListItem 关联的数据对象,请使用 RouteCommand。这是示例

      <ListView.ItemTemplate>
        <DataTemplate>
          <Button Margin="5,0" Command="{StaticResource ButtonCommand}" 
                               CommandParameter="{Binding}">
        </DataTemplate>
      <ListView.ItemTemplate>
      

      您还需要至少在 ListView.Resources 中定义 Command

      <RoutedCommand x:Key="ButtonCommand"/>
      

      然后像这样设置 CommandBinding

      <ListView.CommandBindings>
        <CommandBinding Command="{StaticResource ButtonCommand}" Executed="Button_Click"/>
      </ListView.CommandBindings>
      

      最后写句柄

          Button_Click(object sender, ExecutedRoutedEventArgs e)
          {
              e.Parameter// object that you Specified in CommandParameter
          }
      

      您可以预先使用任何 MVVM 框架,在模型中定义所有命令和命令逻辑,然后将这些命令绑定到相应的元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        相关资源
        最近更新 更多