C# 填充后的ListView不刷新
我使用的是外部excel文件填充的ListView,reading很有效,但我在这4天内尝试解决一些问题-ListView没有显示这些对象的更改状态 设置ListView对象的ItemsSource属性和自定义ListViewItem对象数组后,在更改对象中的值后使用数据绑定,ListView不会显示这些对象的新状态 下面是xaml代码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">
<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));
}