我正在使用MVVM结构,EF 6.0作为我的数据源,Datagrid作为我的用户控件。
我有:
简而言之,它到目前为止正确显示数据网格中的数据。现在我想执行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绑定可能无法正常工作。我需要创建并绑定到各个列。这是真的,还是可以通过数据网格对实体的一部分进行更新?
非常感谢任何帮助或指导。
由于
答案 0 :(得分:0)
您在新的Context上创建一个新的Context,然后创建SaveChanges,它没有挂起的更改:
void UpdateCommandExecute()
{
using (_context = new BenchMarkEntities())
{
_context.SaveChanges();
}
}
答案 1 :(得分:0)
迈克说: “你在没有待定更改的新上下文中创建一个新的Context然后SaveChanges”
这意味着你不应该在函数UpdateCommandExecute中创建新的上下文。
因此,请尝试修改UpdateCommandExecute函数,如下所示:
void UpdateCommandExecute()
{
_context.SaveChanges();
}
快乐编码