我正在使用WPF和Mvvm,我的ListView将其ItemSource绑定到ICollectionView。如何处理选定的项目更改事件?
最初我有一个DataGrid的ItemSource绑定到相同的ICollectionView并设置集合的CurrentChanged事件。一切正常,但ListView不是这样。
答案 0 :(得分:4)
正如Thomas所提到的,所有你需要做的就是将列表框的SelectedItem属性绑定到viewmodel中的属性。为了说清楚,这是一个例子。
这是我的观点
<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属性。
答案 1 :(得分:3)
只需将SelectedItem
的{{1}}绑定到ViewModel的属性