实体框架加载和本地获取ObservableCollection

本文关键字:获取 ObservableCollection 框架 加载 实体 | 更新日期: 2023-09-27 17:51:14

我无法获得更新的结果并将其显示到datagrid,这是我的代码:

Xaml:

<Button Content="Button"
        Click="Button_Click"
        Margin="0,90,0,116" />
<DataGrid x:Name="manPowerOrgDataGrid"
          ItemsSource="{Binding}"
          Margin="0,0,0,184">
</DataGrid>
我使用Load方法和Local属性来获得一个ObservableCollection:
    public Window1()
    {
        InitializeComponent();
        using (DesignerEntities db=new DesignerEntities())
        {
            db.ManPowerOrgs.Load();
            DataContext = db.ManPowerOrgs.Local;
        } 
    }

保存更改并刷新:

private void Button_Click(object sender, RoutedEventArgs e)
{
    using (DesignerEntities db=new DesignerEntities())
    {
        db.ManPowerOrgs.Add(new ManPowerOrg() { Caption = "A", Number = 1, SMonth = 100 });
        db.SaveChanges();
        manPowerOrgDataGrid.Items.Refresh();
    }
}

但是更新的结果不会显示在我的UI上!

实体框架加载和本地获取ObservableCollection

我建议不要直接绑定到DbSet。使用ObservableCollection可能更合适。

例如:

public ObservableCollection<ManPowerOrg> MyList = new ObservableCollection<ManPowerOrg>();
  public Window1()
    {
        InitializeComponent();
        using (DesignerEntities db = new DesignerEntities())
        {
            foreach (var item in db.ManPowerOrgs.ToList())
            {
                MyList.Add(item);
            }
        }
       DataContext = this;
    }

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        using (DesignerEntities db = new DesignerEntities())
        {
            ManPowerOrg myItem = new ManPowerOrg() {Caption = "A", Number = 1, SMonth = 100};
            db.ManPowerOrgs.Add(myItem);
            db.SaveChanges();
            MyList.Add(myItem);
        }
    }

然后别忘了修改绑定:

  <DataGrid x:Name="manPowerOrgDataGrid"
      ItemsSource="{Binding MyList}"
      Margin="0,0,0,184">