WPF DataGrid不更新实体

时间:2014-12-11 22:10:49

标签: c# wpf mvvm datagrid entity-framework-6

我正在使用MVVM结构,EF 6.0作为我的数据源,Datagrid作为我的用户控件。

我有:

  • Viewmodels:实现INotifyPropertChanged的基础,一个包含其他视图模型的主视图模型和一个显示数据的“具体”视图模型。
  • 命令:我有一个ICommand类,并在我的viewmodel中使用它。

简而言之,它到目前为止正确显示数据网格中的数据。现在我想执行CRUD操作。但是,当我对datagrid进行更改然后点击我的保存按钮(绑定到ICommand属性)时,没有任何更改传播回实体。

这是我的viewmodel:

class SymbolWeightsViewModel : ViewModelBase
{
    BenchMarkEntities _context = new BenchMarkEntities();

RelayCommand _updateCommand;

public ObservableCollection<Weight> Weights
{
    get;
    private set;
}

public BenchMarkEntities Context
{
    get { return _context; }
}

public SymbolWeightsViewModel()
{
        _context.Weights.Load();
        this.Weights = _context.Weights.Local;
 }

~SymbolWeightsViewModel()
{
    _context.Dispose();
}

public ICommand UpdateCommand
{
    get
    {
        if (_updateCommand == null)
        {
            _updateCommand = new RelayCommand(param => this.UpdateCommandExecute(),
            param => this.UpdateCommandCanExecute);
        }
        return _updateCommand;
    }
}

void UpdateCommandExecute()
{
    using (_context = new BenchMarkEntities())
    {                
        _context.SaveChanges();
    }
}
bool UpdateCommandCanExecute
{
    get {return true;}
}

我的观点是BenchmarkEntities对象和Datagrid没有看到对方。为什么我不确定但是绑定失败的地方。我是否需要重新实施BenchmarkEntities才能执行更新?

我的观点: <StackPanel> <DataGrid ItemsSource="{Binding Weights, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="True"> </DataGrid> <Button Name="SaveChanges" Height="32" Command="{Binding UpdateCommand}"> </Button> </StackPanel>

查看相关:我认为将整个Weight对象与DataGrid绑定可能无法正常工作。我需要创建并绑定到各个列。这是真的,还是可以通过数据网格对实体的一部分进行更新?

非常感谢任何帮助或指导。

由于

2 个答案:

答案 0 :(得分:0)

您在新的Context上创建一个新的Context,然后创建SaveChanges,它没有挂起的更改:

void UpdateCommandExecute()
{
    using (_context = new BenchMarkEntities())
    {                
        _context.SaveChanges();
    }
}

答案 1 :(得分:0)

迈克说: “你在没有待定更改的新上下文中创建一个新的Context然后SaveChanges”

这意味着你不应该在函数UpdateCommandExecute中创建新的上下文。

因此,请尝试修改UpdateCommandExecute函数,如下所示:

void UpdateCommandExecute()
{
    _context.SaveChanges();
}

快乐编码