【问题标题】:Immediately update .NET EF database after bound WPF control change绑定 WPF 控件更改后立即更新 .NET EF 数据库
【发布时间】:2014-03-05 22:40:09
【问题描述】:

我创建了一个使用实体框架和 WPF 的 UI 的 .NET 项目。 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>

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

【问题讨论】:

  • 我不知道更多,但您应该使用 UpdateSourceTrigger 到 PropertyChanged 以获取 IsChecked 属性。
  • 我不认为可以自动更新数据库。您必须使用“已检查”事件并调用数据库更新,或者使用实现 INotifyPropertyChanged 的​​类并通过单击按钮处理更新。

标签: c# wpf entity-framework


【解决方案1】:

如果具有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);
    }
}

【讨论】:

  • 这种方法的问题是我必须同时监听数据源并注册到集合中所有新创建的对象 - 相当多的手动逻辑。
  • 相当多的手动逻辑...废话。创建一个扩展ObservableCollection&lt;T&gt; 类的类,然后您可以轻松地将处理程序附加到构造函数和Add 和Insert 方法中的每个项目。我自己使用这种方法。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多