![](/img/trans.png)
[英]WPF DataGrid bound to entity framework doesn't update after change of data in ViewModel
[英]Immediately update .NET EF database after bound WPF control change
我創建了一個.NET項目,該項目使用UI的實體框架和WPF。 UI包含一個帶有兩列的DataGrid,一個是普通的只讀DataGridTextColumn
,另一個是帶有內部Checkbox
DataGridTemplateColumn
,以啟用單擊編輯:
<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" >
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelectedForDisplay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding FullName}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
我已經通過直接更改數據庫中的某些條目來檢查復選框的綁定是否起作用。 現在,我希望應用程序立即將對選擇復選框的更改提交到基礎數據庫。 我該怎么辦? 將一些事件處理程序添加到視圖邏輯中感覺不對,但是我不確定我有什么選擇。
如果具有IsSelectedForDisplay
屬性的類實現了INotifyPropertyChanged
接口 ,則可以將處理程序附加到集合中每個數據項的INotifyPropertyChanged.PropertyChanged
事件。 更改屬性后,系統會通知您,然后您可以保存更改。 您可以執行以下操作:
item.PropertyChanged += Item_PropertyChanged;
...
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if ((sender as YourClass) != null)
{
SaveDataType((YourClass)sender);
}
}
根據使用UpdateSourceTrigger
的提示進行一些挖掘之后,我發現了以下解決方案:
<CheckBox IsChecked="{Binding IsSelectedForDisplay, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True}" Binding.SourceUpdated="Binding_SourceUpdated" />
在事件處理程序中,我可以調用dbContext.SaveChanges();
(盡管我可能會用一個事件代替它,以便稍后將視圖與其余邏輯分離。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.