C# 填充后的ListView不刷新

C# 填充后的ListView不刷新,c#,wpf,xaml,listview,data-binding,C#,Wpf,Xaml,Listview,Data Binding,我使用的是外部excel文件填充的ListView,reading很有效,但我在这4天内尝试解决一些问题-ListView没有显示这些对象的更改状态 设置ListView对象的ItemsSource属性和自定义ListViewItem对象数组后,在更改对象中的值后使用数据绑定,ListView不会显示这些对象的新状态 下面是xaml代码 <ListView Name="databaseListView" Height="333" Background="Silver">

我使用的是外部excel文件填充的ListView,reading很有效,但我在这4天内尝试解决一些问题-ListView没有显示这些对象的更改状态

设置ListView对象的ItemsSource属性和自定义ListViewItem对象数组后,在更改对象中的值后使用数据绑定,ListView不会显示这些对象的新状态

下面是xaml代码

 <ListView Name="databaseListView" Height="333" Background="Silver">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                        <GridViewColumn Width="50">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                        <CheckBox IsChecked="{Binding 
    Path=IsSelected, Mode=TwoWay}" Checked="CheckBox_Checked"></CheckBox>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}" Width="100"/>
                        <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}" Width="100"/>
                        <GridViewColumn Header="City" DisplayMemberBinding="{Binding City}" Width="100"/>
                        <GridViewColumn Header="Email" DisplayMemberBinding="{Binding Email}" Width="100"/>
                        <GridViewColumn Header="Personal Phone" DisplayMemberBinding="{Binding PersonalPhone}" Width="100"/>
                        <GridViewColumn Header="Call Status" DisplayMemberBinding="{Binding CallStatus}" Width="100"/>
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>   
例如,这样的代码不会影响ListView(假设ListView中选择的项目很少)


您需要修改getter/setter以触发接口的
PropertyChanged
事件

也就是说,将
public bool IsSelected{get;set;}
更改为:

class MyListViewItem : INotifyPropertyChanged
{
    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;
            OnPropertyChanged(nameof(IsSelected));
        }
    }
}
然后将以下函数添加到
MyListViewItem
类中

protected void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
class MyListViewItem : INotifyPropertyChanged
{
    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;
            OnPropertyChanged(nameof(IsSelected));
        }
    }
}
protected void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}