【问题标题】:Datagrid binding not getting MVVM dataset updatesDatagrid 绑定未获得 MVVM 数据集更新
【发布时间】:2015-11-01 20:12:46
【问题描述】:

我对 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");
        }
    }

【问题讨论】:

  • 你能在添加记录的地方显示代码吗?

标签: c# wpf binding datagrid


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我一头雾水,你是直接往数据库里添加记录吗?

    如果您试图避免每次都重新启动该应用程序以显示数据库更新,则可以使用一个简单的“刷新”按钮来清除本地数据并重新加载数据库数据。

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

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

    也许这可以帮助您开始您的旅程。
    http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server

    【讨论】:

      【解决方案3】:

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

      ObservableCollection 已经这样做了。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-17
        • 1970-01-01
        • 2018-10-26
        • 2013-12-17
        • 1970-01-01
        • 2021-08-31
        • 2020-09-27
        • 2022-01-11
        相关资源
        最近更新 更多