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(如果它不会自动更新).
只需订阅 ObservableCollection 的 CollectionChanged 事件即可。事件处理程序接收NotifyCollectionChangedEventArgs类的实例,该类包含描述是否已添加或删除行的属性“Action”。它还包含已添加(“NewItems”)或删除(“OldItems”)的行的列表。这应该为您提供足够的信息来更新您的数据库。
您可以在行 ViewModel (我猜是类)中实现INotifyPropertyChangedItemsList,然后订阅它,以查明某行是否脏并且需要在数据库中更新。该界面由一个事件组成,PropertyChanged只要值发生变化,该事件就会在 ViewModel 的属性设置器中引发。
您是对的,NotifyCollectionChanged 事件来得太早,无法立即插入数据库。但是您可以在事件处理程序中将该行标记为“已插入”,并在完成该行所需的最后一个属性更改事件(见上文)发生后立即将其插入。
| 归档时间: |
|
| 查看次数: |
7953 次 |
| 最近记录: |