刷新 WPF Datagrid 未绑定到可观察集合?

Posted

技术标签:

【中文标题】刷新 WPF Datagrid 未绑定到可观察集合?【英文标题】:Refresh WPF Datagrid not bound to observable collection? 【发布时间】:2016-11-08 11:49:12 【问题描述】:

我正在使用带有 Datagrid 的 LINQ to SQL 并将数据绑定到自动生成的字段。通过 LINQ 提交更改时,数据更新正常。 我遇到的问题是直接在数据库上运行 SQL 语句后,我似乎无法刷新更新的数据。数据库数据已正确更新,关闭并重新启动应用程序数据已正确更新。

我试过了,

MyTable.Items.Refresh();

还有

private DatabaseDataContext sql = new DatabaseDataContext(
            Properties.Settings.Default.StaffConnectionString);

sql.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);

用于将数据绑定到 Datagrid 列的 XAML,Info_Data 是数据库表中自动生成的字段。

<DataGridTemplateColumn Header="Info" Width="*" SortMemberPath="Words">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock FontWeight="Light" Text="Binding Path=Info_Data, UpdateSourceTrigger=PropertyChanged" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>

从所有的角度来看,我似乎需要创建一个可观察的集合并将数据绑定到该集合并更新集合以刷新数据网格表。 有没有办法解决这个问题?

【问题讨论】:

试试:CollectionViewSource.GetDefaultView(MyTable.ItemsSource)?.Refresh(); 感谢@JohanLarsson,这也不起作用。这是相当令人沮丧的。 只需将项目放在 ObservableCollection 中,将其绑定到 XAML 中,然后继续你的生活。通过做错事来惩罚自己,您不会获得任何奖励积分。但是,如果您绝对决定浪费自己的时间,您是否尝试过为集合属性提高 PropertyChanged?还是你连绑定都不行? @EdPlunkett,不知道这是错误的方式,感谢您的建议。这是我的第一个真正的应用程序,所以仍在尝试很多东西,我将不得不重新编写一些代码来将所有内容与ObservableCollection 绑定。不确定我是否遵循您对 collection 属性的意思? 您是如何将项目放入网格中的? “正确”的方法是将集合公开为视图模型的属性,并将其绑定到 XAML 中的 DataGrid.ItemsSource。不过,我有一种感觉,这不是你所做的。顺便说一句,我认为您知道 ObservableCollection 是正确的方法,因为您提到知道它会解决您的所有问题。但是,是的,这不仅仅是 a 方式,而是 方式。 【参考方案1】:

您可以尝试使用 SqlDataAdapter 和 DataTable 从数据库加载信息并绑定到 DataGrid:

var da = new SqlDataAdapter("SELECT * FROM " + view, conn);
var dt = new DataTable();
da.Fill(dt);
var dg = new DataGrid();// Your DataGrid
dg.ItemsSource = dt.DefaultView;

更新时:

dt.Rows.Clear();
da.Fill(dt);
dt.AcceptChanges();

【讨论】:

以上是关于刷新 WPF Datagrid 未绑定到可观察集合?的主要内容,如果未能解决你的问题,请参考以下文章

wpf datagrid 怎么增加数据行

为啥我的 ListView 数据绑定到可观察集合不能正确显示

如何将 WPF DataGrid 绑定到 ObservableCollection

淘汰赛,通过自定义绑定修改时未观察到可观察数组

wpf中,当DataGrid.ItemsSource与ObservableCollection绑定后,值变化时,DataGrid如何刷新?

基于另一个 Combobox 以编程方式绑定 Datagrid 中 ComboBox 的值