单击ListBoxItem区域内的任何控件时触发SelectedIndex已更改
我有一个ListBoxItem的数据模板,它包含几个按钮,以及很少的自定义控件,如网格或图表。 每个按钮都绑定到一个合适的命令处理程序,ListView控件的SelectedIndex属性也绑定到ViewModel的属性。
问题 :在命令处理程序(绑定到按钮)中我无法解析当前选定的项目/索引,因为它在单击ListBox项目中的按钮或其他控件时没有改变,但是当我单击ListBoxItem区域本身时 – SelectedIndex正在改变。
问题是如何在单击ListBoxItem中的任何控件时触发SelectedIndex更改?
将其添加到ListBox.Resources
编辑
只要具有键盘焦点,前一种方法仅选择ListBoxItem。 如果将焦点移出ListBoxItem,它将再次被取消选中。
这是键盘焦点在项目中移动时选择ListBox项目的另一种简单方法,当焦点移出ListBoxItem时它保持选中状态
而在守则背后
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e) { ListBoxItem item = (ListBoxItem)sender; item.IsSelected = true; }
您是否可以将项目设置为绑定命令中的选定项目? 如果列表Item viewmodel可以访问ListBoxes视图模型的任何内容,那么您应该能够设置绑定在那里的属性。
Private Sub ButtonClickExecute() ListBoxVM.SelectedItem = Me.MyModelItem End Sub
我偶尔也这样做了,它运行得很好,只要SelectedItem绑定属性是读/写,PropertyChangeNotification就可以了。
如果您的ViewModel和Model不支持此function,请告诉我们,我们可以尝试其他方式。
哎呀,没有马上注意到C#标签。 那应该是:
ListBoxVM.selectedItem = this.myModelItem;
仅限XAML的解决方案:
您可以调整ItemContainerStyle并在触发器上侦听鼠标焦点在Item内部。 它适用于所有类型的子元素(在这个例子中只是鼠标焦点,这不应该是一个问题,因为键盘也会自动选择项目……)
例:
test test test test
如果您只对数据模板下面的项目感兴趣,可以使用带有绑定作为参数的CommandParameter。
CommandParameter = {}绑定
这会将当前项目作为参数传递给命令,因此无需跟踪所选项目。