实体框架和ObservableCollections

时间:2014-10-22 19:42:02

标签: c# wpf linq entity-framework mvvm

我正在使用WPF / MVVM探索实体框架,这可能是基本的,但我不能让它工作。我有一个包含两个实体的edmx图,OUTAGE_DETAILS和OUTAGE_TYPE_LOOKUP。我只想对其中一个实体进行linq并返回一个可以绑定到DataGrid的ObservableCollection。最后我将添加/修改DataGrid中的记录。我做错了什么,这是编辑和添加记录的最终结果的最佳方法吗?

这就是我所拥有的:

private Data_Entities oeContenxt = new Data_Entities();

private ObservableCollection<OUTAGE_DETAILS> _outagecollection;
public ObservableCollection<OUTAGE_DETAILS> OutageCollection
{
   get { return _outagecollection; }
   set
   {
        if (value == _outagecollection) return;
        _outagecollection = value;
   }
}

private void ShowOutages()
{
   var query = (from o in oeContenxt.OUTAGE_DETAILS
                select o.OUTAGE_SEQ_ID).ToList();

   OutageCollection = new ObservableCollection<OUTAGE_DETAILS>(query.ToList()); // <- Error Here
}

// constructor
public MainWindowViewModel()
{
   this.ShowOutages();
}

,错误是: The best overloaded method match for 'System.Collections.ObjectModel.ObservableCollection<WpfApplication1.OUTAGE_DETAILS>.ObservableCollection(System.Collections.Generic.IEnumerable<WpfApplication1.OUTAGE_DETAILS>)' has some invalid arguments

我认为这是这种情况的一个常见错误,但我还没有找到解决方案。另外,我是否在我的馆藏声明中正确使用了实体名称OUTAGE_DETAILS?

对于非常基本的问题感到抱歉,但我正在尝试学习这些东西。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

用EF获取数据,

    public ObservableCollection<OUTAGE_DETAILS> LoadOutageDetails()
    {
        // Charge les données (Load data)
        oeContenxt.OUTAGE_DETAILS.Load();
        return oeContenxt.OUTAGE_DETAILS.Local;
    }

在视图后面的代码中使用它:

dtgrid.ItemsSource = LoadOutageDetails();

或者使用MVVM,将vm绑定到View的dataContext上

this.DataContext = new MyViewModel();

在视图的XAML中:

<DataGrid ItemsSource="{Binding AllOutageDetails}"></DataGrid>

你的VM:

class MyViewModel{
   private ObservableCollection<OUTAGE_DETAILS> _allOutageDetails;

        /// <summary>
        /// ObservableCollection de tous les outage details
        /// </summary>
        public ObservableCollection<OUTAGE_DETAILS> AllOutageDetails
        {
            get
            {
                return _allOutageDetails;
            }
            set
            {
                _allOutageDetails= value;
            }
        }

        public MyViewModel()
        {
            _allOutageDetails = LoadOutageDetails();
        }
}

享受自己!