C# 绑定WPF控件更改后立即更新.NET EF数据库

C# 绑定WPF控件更改后立即更新.NET EF数据库,c#,wpf,entity-framework,C#,Wpf,Entity Framework,我创建了一个.NET项目,它使用实体框架和WPF作为UI。该UI包含一个具有两列的DataGrid,一列为普通只读的DataGridTextColumn,另一列为DataGridTemplateColumn,内部带有一个复选框以启用单击编辑: <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" > <DataGrid.Columns>

我创建了一个.NET项目,它使用实体框架和WPF作为UI。该UI包含一个具有两列的DataGrid,一列为普通只读的
DataGridTextColumn
,另一列为
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>


我已经通过直接更改数据库中的一些条目检查了复选框的绑定是否有效。现在,我希望应用程序立即将对选择复选框的更改提交到基础数据库。我怎么能这样做?将某些事件处理程序添加到视图逻辑中感觉不正确,但我不确定有哪些替代方法。

如果具有
属性的类已选择用于显示
属性,则可以将处理程序附加到集合中每个数据项的
INotifyPropertyChanged.PropertyChanged
事件。当属性发生更改时,系统会通知您,然后您可以保存更改。你可以这样做:

item.PropertyChanged += Item_PropertyChanged;


根据使用
UpdateSourceTrigger
的提示进行了一些挖掘之后,我找到了以下解决方案:

<CheckBox IsChecked="{Binding IsSelectedForDisplay, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True}" Binding.SourceUpdated="Binding_SourceUpdated" />


在事件处理程序中,我可以调用
dbContext.SaveChanges()(尽管稍后我可能会用一个事件来替换它,以便将视图与剩余逻辑解耦。)

我不知道更多信息,但您应该使用UpdateSourceTrigger来更改IsChecked属性的属性。我不确定是否可以自动更新数据库。您必须使用“checked”事件并调用数据库更新,或者使用实现INotifyPropertyChanged的类并通过单击按钮来处理更新。这种方法的问题是,我还必须侦听数据源并注册到集合中所有新创建的对象-相当多的手动逻辑。相当多的手动逻辑。。。胡说创建一个扩展
ObservaleCollection
类的类,然后您可以轻松地将处理程序附加到构造函数中的每个项以及
添加
插入
方法。我自己用这个方法。
<CheckBox IsChecked="{Binding IsSelectedForDisplay, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True}" Binding.SourceUpdated="Binding_SourceUpdated" />