我有一个数据网格,它使用Caliburn Micro绑定到一组项目。我想在用户对每一行进行编辑后立即更新网格。我认为这很简单(比如简单的ASP.NET),但我没有发现任何似乎有用的东西。
这是我的ViewModel
public class JournalViewModel : Caliburn.PresentationFramework.PropertyChangedBase
{
private CrystalRptDataEntities ctx = new CrystalRptDataEntities();
private BindableCollection<EmployeeInfo> employees;
public JournalViewModel()
{
Load();
}
public void Load()
{
employees = new BindableCollection<EmployeeInfo>(ctx.EmployeeInfoes);
AllEmployees = employees;
}
public BindableCollection<EmployeeInfo> AllEmployees
{
get { return employees; }
set
{
employees = value;
NotifyOfPropertyChange(() => AllEmployees);
}
}
//....
}
这是我的观点
<DataGrid x:Name="AllEmployees" AutoGenerateColumns="True" />
答案 0 :(得分:3)
我找到了解决自己问题的方法 - 它花了3件事。
1)我必须将此方法添加到我的JournalViewModel类
public void SaveChanges()
{
ctx.SaveChanges();
}
2)然后我必须将这两个引用添加到我的xaml文件
xmlns:i="clr-namespace:System.Windows.Interactivity;
assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
3)然后我必须将事件附加到我的Datagrid,如下所示:
<DataGrid x:Name="AllEmployees"
AutoGenerateColumns="True"
cal:Message.Attach="[Event CellEditEnding]=[Action SaveChanges()]">
这样每次我编辑完一个单元格时,ctx都会被保存。