您可以通過將網格的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