Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF可编辑数据网格,如MS Access和MVVM_.net_Wpf_Mvvm - Fatal编程技术网

.net WPF可编辑数据网格,如MS Access和MVVM

.net WPF可编辑数据网格,如MS Access和MVVM,.net,wpf,mvvm,.net,Wpf,Mvvm,我正在从事一个项目,我已经为WPF桌面应用程序实现了MVVM。我有一种情况,我想使Datagrid像旧的MS Access表列表视图一样可编辑。我正在将Datagrid的ItemsSource绑定到成员实现INPC的ObservableCollection。现在,我想允许用户通过单击列的任何单元格来更新成员,当他们导航到其他行或失去焦点时,应验证数据,然后将其保存到数据库中 如何在我的ViewModel中捕获此类事件以及如何实现此简单功能?您可以通过将网格的SelectedItem绑定到View

我正在从事一个项目,我已经为WPF桌面应用程序实现了MVVM。我有一种情况,我想使Datagrid像旧的MS Access表列表视图一样可编辑。我正在将Datagrid的ItemsSource绑定到成员实现INPC的ObservableCollection。现在,我想允许用户通过单击列的任何单元格来更新成员,当他们导航到其他行或失去焦点时,应验证数据,然后将其保存到数据库中


如何在我的ViewModel中捕获此类事件以及如何实现此简单功能?

您可以通过将网格的SelectedItem绑定到ViewModel上的属性来触发保存操作,并且在属性的setter中,您可以保存以前选择的项,然后将其替换为新选择的项,简言之,伪代码如下所示:

公共MyDataObject SelectedItem { 获取{return\u selectedItem;} 设置 { 如果值!=\u选择编辑项 { SaveMyItem_selectedItem; _选择editem=值; 关于财产变更的选择项; } } } 私有MyDataObject _selectedItem;
当然,您可能需要对这种方法进行一些调整——如果保存修改的项目需要相当长的时间,那么您将希望在后台线程上执行此操作。如果将验证指定为网格上列绑定的一部分,则在正确验证数据之前,用户将无法选择和编辑新行。

我将使用Linq to Sql并将datagrid ItemsSource直接绑定到所需的表。这将为您处理所有更改跟踪,并在您只需调用SubmitChanges时保存到数据库,您可以在selectedItem发生更改时执行此操作,请参见slugster的回答。

希望这会起作用,我唯一需要注意的是,它应该保存在某个后台线程上。。顺便说一句,我只是在搜索一些面向模式的方法,我想到的是使用IEditableCollectionView:。您对这种方法有何看法?我曾尝试在DTO上使用IEditObject,效果非常好。但我仍然必须在后台线程中保存对象。关于您的方法,我想知道的一件事是,如果用户选择了一行,而没有选择另一行,他只是从页面导航,该怎么办。它会调用所选属性的setter吗?@Shoaib-是的,只要您在SelectedItem绑定上包含UpdateSourceTrigger=PropertyChanged,setter将在他们选择新行时被调用。最好您也检查一下其他方法,有几种不同的方法。IEditableCollectionView将帮助您编辑项目列表,但您仍然必须注意将编辑的项目保存到数据存储数据库中,这是我的方法或衍生工具的所在。使用LinqToSQL应该可以正常工作,但我不能使用linq to sql,因为我已经将LLBLGen pro用作DAL。甚至我也不能将LLBLGen实体传递给我的视图,因为它将紧密耦合层。我想要一种能与POCO合作的方法。