【发布时间】:2012-09-06 09:58:37
【问题描述】:
我正在尝试使用 MVVM 在 WPF 中执行列表框更改事件。请让我知道如何执行此 selectionchanged 事件。
【问题讨论】:
我正在尝试使用 MVVM 在 WPF 中执行列表框更改事件。请让我知道如何执行此 selectionchanged 事件。
【问题讨论】:
你可以使用
System.Windows.Interactivity 的引用xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
然后
<ListBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding YourCommand}"
CommandParameter="{Binding YourCommandParameter}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
【讨论】:
您可以将列表框的 SelectedItem 属性绑定到 ViewModel 上的属性:
<ListBox SelectedItem="{Binding SelectedItem}" ...>
....
</ListBox>
在该属性中,总是会有 ListBox 中的选定项。如果您确实需要在选择更改时执行某些操作,您可以在该属性的设置器中执行此操作:
public YourItem SelectedItem
{
get { return _selectedItem; }
set
{
if(value == _selectedItem)
return;
_selectedItem = value;
NotifyOfPropertyChange("SelectedItem");
// selection changed - do something special
}
}
【讨论】:
SelectionMode="Multiple" 和 "Extended",这仅适用于选择的第一个项目 - 当您展开选择时 SelectedItem 不会改变。在这种情况下,接受的答案可以正常工作(并允许将 ListBox 的 SelectedItems 列表作为命令参数传递:CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, Path=SelectedItems}")。
您可以将 ListBox SelectionChanged 事件绑定到 ViewModel 中的命令。
【讨论】: