C# 在WPF中使用Linq到Sql类更新ListView

C# 在WPF中使用Linq到Sql类更新ListView,c#,wpf,linq,listview,C#,Wpf,Linq,Listview,我试图做一个简单的程序,通过LINQtoSQL将数据添加到数据库中,我试图实现的是当我发送数据时,listview会自动更新下面是代码 private DataClasses1DataContext DC = new DataClasses1DataContext(); private void Window_Loaded(object sender, RoutedEventArgs e) { ListViewData.ItemsSource = DC.Persons

我试图做一个简单的程序,通过LINQtoSQL将数据添加到数据库中,我试图实现的是当我发送数据时,listview会自动更新下面是代码

private DataClasses1DataContext DC = new DataClasses1DataContext();

    private void Window_Loaded(object sender, RoutedEventArgs e) {

        ListViewData.ItemsSource = DC.Persons;
    }

    private void Button_Click(object sender, RoutedEventArgs e) {

        Person NewPerson = new Person() { Name = nametxt.Text, Address = addresstxt.Text };

        DC.Persons.InsertOnSubmit(NewPerson);
        DC.SubmitChanges();

    }
XAML代码

<ListView Name="ListViewData" HorizontalAlignment="Left" Height="238" Margin="10,72,0,0" VerticalAlignment="Top" Width="321">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
                <GridViewColumn Header="Address" DisplayMemberBinding="{Binding Address}"/>
            </GridView>
        </ListView.View>
    </ListView>


我读过关于INotifyPropertyChanging,INotifyPropertyChanged的内容,但我认为Visual Studio在添加Linq To Sql类时生成的代码已经实现了它们,但我不确定,我刚开始使用WPF

除非源集合实现
INotifyCollectionChanged
,否则当源集合更改时,
列表视图不会自动更新自身。如果源集合未实现
INotifyCollectionChanged
,则必须手动更新
ItemsSource
属性。然而,就你而言,我认为你不能简单地做到这一点:

DC.SubmitChanges();
ListViewData.ItemsSource = DC.Persons;
我非常确定(不是肯定的)在调用
DC.SubmitChanges()
后,
DC.Person
仍将引用同一对象。如果尝试将
ItemsSource
属性重新设置为相同的值,则不会触发刷新

如果
DC.Persons
的项目相对较少,则可以执行以下操作:

DC.SubmitChanges();
ListViewData.ItemsSource = DC.Persons.ToArray();

这将把
Persons
复制到一个新数组,并将该数组分配给ListView的
ItemsSource
属性。如果你有数以千计的项目,那么你可能想找到另一个解决方案;可能是
CollectionViewSource

可观察到的集合