Datagrid绑定未获取MVVM数据集更新

时间:2015-11-01 20:12:47

标签: c# wpf binding datagrid

我对MVVM应用程序中的datagrid绑定有一点问题。我实现了INotifyPropertyChanged但它不适用于datagrid。每次我向数据库网格插入记录都不刷新,我必须重新启动应用程序才能看到更改。这是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");
        }
    }

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我很困惑,您是否将记录直接添加到数据库?

一个简单的&#34;刷新&#34;如果您尝试避免每次重新启动该应用程序以显示数据库更新,则清除本地数据并重新加载数据库数据的按钮将起作用。

但我猜你想让数据库更新进入你的应用程序 你可以谷歌,但这里没有灵丹妙药。

如果您的数据库正在应用程序范围之外进行更新,那么您必须实现一种方法来通知应用程序数据已更改。
然后解决这些更改的方法,包括做什么关于冲突。

也许这有助于您开始旅程 http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server

答案 2 :(得分:0)

不需要以下代码: OnPropertyChanged( “PlantsCollection”);

ObservableCollection已经这样做了。

您需要从数据库重新加载或将新记录(在数据库成功之后)插入到您的集合中。

如果您使用的是MVVMLight或类似的MVVM程序包,请转到以下链接: https://github.com/ntierontime/Log4Net/blob/master/Log4Net/UI/MVVMLight/Shared/ViewModels/ViewModelLog.cs