您可以通过将网格的SelectedItem绑定到您的视图模型上的属性来触发“保存”操作,并且在属性的设置器中,您可以在用新选择的项目替换之前保存先前选择的项目,简短的伪代码会是这个样子:
public MyDataObject SelectedItem
{
get { return _selectedItem; }
set
{
if (value != _selectedItem)
{
SaveMyItem(_selectedItem);
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
}
private MyDataObject _selectedItem;
<DataGrid ItemsSource="{Binding MyCollection}" SelectedItem="{Binding SelectedItem, UpdateSourceTrigger=PropertyChanged}" ...etc... />
当然,你可能需要稍微调整这种方法 - 如果花费的时间显着量以保存修改后的项目,那么你会想要做在后台线程上。如果您将验证指定为网格上列绑定的一部分,则用户将无法选择并编辑新行,直到数据正确验证。
希望这会起作用,只有我应该照顾的事情是,它应该保存在一些后台线程..顺便说一句我只是在寻找一些面向模式的方法,我想到了使用IEditableCollectionView:http:/ /blogs.msdn.com/b/vinsibal/archive/2008/05/20/wpf-3-5-sp1-feature-ieditablecollectionview.aspx。你对这种方法有什么看法? –
我已经尝试在我的DTO上使用IEditObject,它的作用就像一个魅力。但仍然需要在后台线程中保存对象。有一件事我想知道你的方法,如果用户选择一行而他们没有选择另一行,他只需从页面导航即可。它会调用所选属性的setter吗? –
@Shoaib - 是的,只要您在SelectedItem绑定中包含'UpdateSourceTrigger = PropertyChanged',setter将在他们选择新行时被调用。 – slugster