C# 在WPF中使用Linq到Sql类更新ListView
我试图做一个简单的程序,通过LINQtoSQL将数据添加到数据库中,我试图实现的是当我发送数据时,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
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
可观察到的集合