数据网格绑定未获取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");
        }
    }

数据网格绑定未获取MVVM数据集更新

将记录添加到数据库上下文后,还需要将其添加到视图模型中的集合中。如果您只是将记录添加到数据库中,则属性更改事件将不会激发,因为数据库插入未连接到该集合。

我很困惑,你是直接向数据库中添加记录吗?

如果您试图避免每次重新启动应用程序以显示数据库更新,那么清除本地数据和重新加载数据库数据的简单"刷新"按钮就会起作用。

但我猜您希望数据库更新进入您的应用程序
你可以四处搜索,但这里没有灵丹妙药

如果在应用程序范围之外更新数据库,则必须实现一种方法来通知应用程序数据已更改
然后是解决这些更改的方法,包括如何处理冲突。

也许这有助于你开始你的旅程
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