使用Caliburn Micro更新项目更改时的DataGrid

时间:2015-07-29 21:32:49

标签: mvvm datagrid caliburn

我有一个数据网格,它使用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" />

1 个答案:

答案 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都会被保存。