我有一个带有按钮和文本块的列表框作为 ItemTemplate。按钮有一个onClick
事件。
我想要的只是获取单击项目的索引,但SelectedIndex
我的 ListBox 中的属性始终为-1!
如何获取点击项目的索引?
我有一个带有按钮和文本块的列表框作为 ItemTemplate。按钮有一个onClick
事件。
我想要的只是获取单击项目的索引,但SelectedIndex
我的 ListBox 中的属性始终为-1!
如何获取点击项目的索引?
问题在于 Button 控件正在吞噬鼠标事件以提供 Click 行为,因此 ListBox 永远不会收到任何事件来告诉它选择已更改。
正如@Alexander 建议的那样,您可以使用带有命令的 MVVM 样式方法来处理视图模型中的操作并将数据上下文作为参数传递。
或者,您可以将 Button 替换为任何其他布局控件,并使用Silverlight Toolkit中的手势服务或使用常规MouseLeftButtonUp
事件。在任何一种情况下,鼠标事件都会冒泡并使 ListBox 能够处理选择。
你可能想在你的列表框中实际选择一些东西:p
如果要获取与当前 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 框架,在模型中定义所有命令和命令逻辑,然后将这些命令绑定到相应的元素。