ListView的ItemsSource绑定不会将更改推送到source

问题描述

| 我正在使用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的属性即可