问题描述
|
我正在使用WPF和Mvvm,并且ListView的ItemSource绑定到ICollectionView。如何处理所选项目更改事件?
最初,我有一个DataGrid \的ItemSource绑定到相同的ICollectionView并设置该集合的CurrentChanged事件。一切正常,但ListView并非如此。
解决方法
正如Thomas提到的,您要做的就是将列表框的SelectedItem属性绑定到视图模型中的属性。为了清楚起见,这是一个示例。
这是我的看法
<Grid x:Name=\"LayoutRoot\" Background=\"White\">
<ListView ItemsSource=\"{Binding Contacts}\" SelectedItem=\"{Binding SelectedContact,Mode=TwoWay}\">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text=\"{Binding Name}\" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
这是我的ViewModel
public class MainViewModel: ViewModelBase
{
ObservableCollection<ContactViewModel> contacts;
ContactViewModel selectedContact;
public ContactViewModel SelectedContact
{
get { return selectedContact; }
set {
selectedContact = value;
base.OnPropertyChanged(\"SelectedContact\");
}
}
public ObservableCollection<ContactViewModel> Contacts
{
get { return contacts; }
set {
contacts = value;
base.OnPropertyChanged(\"Contacts\");
}
}
}
每当您尝试更改列表框中的选择时,您都将进入SelectedContact的设置器。
set
{
contacts = value;
base.OnPropertyChanged(\"Contacts\");
}
这样,您将知道所选联系人已更改。
使用属性SelectedContact,您还将知道选择了集合中的哪个项目。
如果要实现多重选择,还可以将ViewModel中的Collection属性绑定到ListView的SelectedItems属性。
, 只需将ListView
的SelectedItem
绑定到ViewModel的属性即可