ListBox控件未实现Command属性。我必须为SelectionChanged事件附加一些功能。有人知道我该怎么办?请帮帮我
答案 0 :(得分:19)
我更喜欢使用绑定到SelectedItem
并在绑定属性的设置中实现任何功能。
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
...
public class ViewModel
{
public IEnumerable<Item> Items { get; set; }
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
if (selectedItem == value)
return;
selectedItem = value;
// Do logic on selection change.
}
}
}
答案 1 :(得分:15)
这是您可以在MVVM应用程序中达到选择已更改事件的方式 首先,我告诉你Command属性只适用于Button现在我们必须明确 在我们的选择更改事件中绑定该属性,如列表框或组合框 在您的XMAL文件中
<ListBox Name="MyListBox" ItemsSource="{Binding ListItems}" Height="150" Width="150" Margin="281,32,-31,118">
<Local:Interaction.Triggers>
<Local:EventTrigger EventName="SelectionChanged">
<Local:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=MyListBox,Path=SelectedItem}"/>
</Local:EventTrigger>
</Local:Interaction.Triggers>
</ListBox>
为此你必须添加dll Syatem.Windows.Interactivity 现在你必须在你的xaml文件命名空间中添加引用,如
xmlns:Local="clr-namespace:System.Windows.Interactivityassembly=System.Windows.Interactivity"
在ViewModel类中,您必须在Con结构中定义命令
public ViewModel123()
{
MyCommand = new RelayCommand<string>(TestMethod);
}
现在创建可以处理选择更改事件的TestMethod方法
private void TestMethod(string parameter)
{
MessageBox.Show(parameter);
}
我希望这可以帮到你。
答案 2 :(得分:2)
基本上你有几个选择:
SelectionChanged
事件并执行命令(该命令可能是行为公开的依赖属性)。答案 3 :(得分:1)
认为Laurent Bugnion的这篇文章将帮助您解决问题:
上面的帖子提到了DataGrid,但我认为它也适用于ListBox!
祝你好运,新年快乐!! :)
答案 4 :(得分:0)
我建议使用RelayCommand
。要么使用MVVM Light Toolkit,要么只使用Josh Smith's implementations中的RelayCommand
和CommandManager
类。我个人只使用这两个类,所以我不需要整个工具包。
虽然这肯定会有效,但根据您的工作情况,可能会有更简单的方法。将对象绑定到SelectedValue
的{{1}}并监听要更改的值可能更容易。