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

时间:2014-03-05 22:40:10

标签: c# wpf entity-framework

我创建了一个.NET项目,它使用Entity Framework和WPF作为UI。用户界面包含一个DataGrid,其中包含两列,一个普通的只读DataGridTextColumn和一个DataGridTemplateColumn,其中包含Checkbox,可以进行单击编辑:

<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>

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

2 个答案:

答案 0 :(得分:0)

如果具有IsSelectedForDisplay属性的类实现INotifyPropertyChanged Interface,则可以将处理程序附加到集合中每个数据项的INotifyPropertyChanged.PropertyChanged事件。更改属性后,您将收到通知,然后您可以保存更改。你可以这样做:

item.PropertyChanged += Item_PropertyChanged;

...

private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if ((sender as YourClass) != null) 
    {
        SaveDataType((YourClass)sender);
    }
}

答案 1 :(得分:0)

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

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

在事件处理程序中,我可以调用dbContext.SaveChanges();(虽然我可能会用事件替换它,以便稍后将视图与其余逻辑分离。)