数据网格绑定未获取MVVM数据集更新
本文关键字:MVVM 数据集 更新 获取 数据网 网格 绑定 数据 | 更新日期: 2023-09-27 18:20:03
MVVM应用程序中的数据网格绑定有一个小问题。我实现了INotifyPropertyChanged
,但它不适用于数据网格。每次我将记录插入数据库时,网格都不会刷新,我必须重新启动应用程序才能看到更改。这是XML:
<DataGrid AutoGenerateColumns="False" x:Name="PlantsGrid" Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="8" Margin="5" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Single" IsReadOnly="True" ItemsSource="{Binding PlantsCollection}" SelectionChanged="PlantsGrid_SelectionChanged" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="Nazwa" Header="Nazwa" Width="*" Binding="{Binding Name}"/>
<DataGridTextColumn x:Name="LatName" Header="Nazwa łacińska" Width="*" Binding="{Binding LatinName}" />
</DataGrid.Columns>
<DataGrid.DataContext>
<ViewModel:PlantViewModel/>
</DataGrid.DataContext>
</DataGrid>
背后的代码:
private ObservableCollection<Plant> _plantsCollection;
public ObservableCollection<Plant> PlantsCollection
{
get
{
return _plantsCollection;
}
set
{
_plantsCollection = value;
OnPropertyChanged("PlantsCollection");
}
}
将记录添加到数据库上下文后,还需要将其添加到视图模型中的集合中。如果您只是将记录添加到数据库中,则属性更改事件将不会激发,因为数据库插入未连接到该集合。
我很困惑,你是直接向数据库中添加记录吗?
如果您试图避免每次重新启动应用程序以显示数据库更新,那么清除本地数据和重新加载数据库数据的简单"刷新"按钮就会起作用。
但我猜您希望数据库更新进入您的应用程序
你可以四处搜索,但这里没有灵丹妙药
如果在应用程序范围之外更新数据库,则必须实现一种方法来通知应用程序数据已更改
然后是解决这些更改的方法,包括如何处理冲突。
也许这有助于你开始你的旅程
http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server
不需要以下代码:OnPropertyChanged("PlantsCollection");
ObservableCollection已经做到了。
您需要从数据库重新加载或将新记录(在数据库成功后)插入到您的集合中。
如果您正在使用MVVMLight或类似的MVVM软件包,请转到以下链接:https://github.com/ntierontime/Log4Net/blob/master/Log4Net/UI/MVVMLight/Shared/ViewModels/ViewModelLog.cs