如何在MVVM列表框Silverlight中实现SelectionChanged
ListBox控件未实现命令属性。我必须为SelectionChanged事件附加一些功能。有人知道我怎么做?请帮助我我想这篇来自Laurent Bugnon的文章将帮助你解决这个问题: 上面的帖子提到了DataGrid,但我确实认为它也可以与ListBox一起使用如何在MVVM列表框Silverlight中实现SelectionChanged,silverlight,mvvm,listbox,command,selectionchanged,Silverlight,Mvvm,Listbox,Command,Selectionchanged,ListBox控件未实现命令属性。我必须为SelectionChanged事件附加一些功能。有人知道我怎么做?请帮助我我想这篇来自Laurent Bugnon的文章将帮助你解决这个问题: 上面的帖子提到了DataGrid,但我确实认为它也可以与ListBox一起使用 致以最良好的祝愿,新年快乐!!:) 我建议使用RelayCommand。使用或仅使用中的RelayCommand和CommandManager类。我个人只使用这两个类,所以我不需要整个工具包 虽然这肯定会起作用,但根据您所做的,可
致以最良好的祝愿,新年快乐!!:) 我建议使用
RelayCommand
。使用或仅使用中的RelayCommand
和CommandManager
类。我个人只使用这两个类,所以我不需要整个工具包
虽然这肯定会起作用,但根据您所做的,可能有一种更简单的方法。将对象绑定到
列表框
的SelectedValue
并侦听该值的更改可能更容易。我更喜欢使用对SelectedItem
的绑定,并在绑定属性的设置中实现任何功能
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
公共类视图模型
{
公共IEnumerable项{get;set;}
私有项目selectedItem;
公共项目选择项
{
获取{return selectedItem;}
设置
{
如果(selectedItem==值)
返回;
选择editem=值;
//对选择进行逻辑更改。
}
}
}
基本上,您有几个选择:
SelectionChanged
事件并执行一个命令(该命令可能是行为公开的依赖属性)这是在MVVM应用程序中访问选择更改事件的方法 首先,我告诉你们命令属性只在按钮中工作,现在我们必须显式地 在我们的选择中绑定该属性会更改事件,如列表框或组合框 在您的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>
在ViewModel类中,必须在Con结构中定义命令
public ViewModel123()
{
MyCommand = new RelayCommand<string>(TestMethod);
}
我希望这能帮助你。@Simsons,只要你有办法绑定到多重选择。我相信在多选过程中会忽略SelectedItem属性。我更喜欢这种方法而不是交互。触发器方法,因为它不需要对System.Windows.Interactions和“”的引用,而我在Visual Studio 2010中经常遇到这些问题。不过,在SelectedItem绑定中还有一个附加项,需要Mode=TwoWay。@JeffBerry SelectedItem默认为TwoWay。从概念的角度来看,从getter进行逻辑选择更改是否好?从几天开始问我自己…我更喜欢这种方式,因为我认为它更干净。
xmlns:Local="clr-namespace:System.Windows.Interactivityassembly=System.Windows.Interactivity"
public ViewModel123()
{
MyCommand = new RelayCommand<string>(TestMethod);
}
private void TestMethod(string parameter)
{
MessageBox.Show(parameter);
}