带MVVM的WPF数据网格

Jos*_*sef 8 c# wpf datagrid mvvm

我正在尝试将WPF中的数据网格绑定到我的ViewModel,以便它将更新对数据库的任何单元格更改,并允许用户删除行并添加新行.我有一部分工作,但无法找到ADD的ELEGANT解决方案并进行修改.这是xaml

<DataGrid AutoGenerateColumns="false" HorizontalAlignment="Left" Margin="26,41,0,0" Name="dataGrid1"   
              ItemsSource="{Binding Path=GetAllItems}" Height="200" VerticalAlignment="Top" Width="266" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=ItemListID}" Header="ID" Visibility="Hidden"/>
            <DataGridTextColumn Binding="{Binding Path=ItemName}" Header="Name" Width="4*" />
            <DataGridCheckBoxColumn Binding="{Binding Path=IsActive}" Header="Active" Width="*"  />
        </DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

然后在我的视图模型方法中

private ObservableCollection< ItemsList> getAllItems()
{
    using (var context = new InspectorGeneralEntities())
    {
        var query = from I in context.ItemsLists
                    select I;

        var item = new ObservableCollection<ItemsList>(query.ToList());
        return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

删除行或修改数据网格上的行不会流入数据库.

a)我需要在xaml代码中创建哪些其他绑定来检测这些事件

b)如何在视图模型中检测已删除的记录或已修改的项目,以便我可以更新datacontext(如果它不会自动更新).

and*_*dyp 1

只需订阅 ObservableCollection 的 CollectionChanged 事件即可。事件处理程序接收NotifyCollectionChangedEventArgs类的实例,该类包含描述是否已添加或删除行的属性“Action”。它还包含已添加(“NewItems”)或删除(“OldItems”)的行的列表。这应该为您提供足够的信息来更新您的数据库。

您可以在行 ViewModel (我猜是类)中实现INotifyPropertyChangedItemsList,然后订阅它,以查明某行是否脏并且需要在数据库中更新。该界面由一个事件组成,PropertyChanged只要值发生变化,该事件就会在 ViewModel 的属性设置器中引发。

您是对的,NotifyCollectionChanged 事件来得太早,无法立即插入数据库。但是您可以在事件处理程序中将该行标记为“已插入”,并在完成该行所需的最后一个属性更改事件(见上文)发生后立即将其插入。