【问题标题】:Entity Framework and ObservableCollections实体框架和 ObservableCollections
【发布时间】:2014-10-22 19:42:01
【问题描述】:

我正在使用 WPF/MVVM 探索实体框架,这可能是最基本的,但我无法让它工作。我有一个包含两个实体 OUTAGE_DETAILS 和 OUTAGE_TYPE_LOOKUP 的 edmx 图。我只是想针对其中一个实体进行 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&lt;WpfApplication1.OUTAGE_DETAILS&gt;.ObservableCollection(System.Collections.Generic.IEnumerable&lt;WpfApplication1.OUTAGE_DETAILS&gt;)' has some invalid arguments

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

【问题讨论】:

  • 能否提供报此错误的代码行?这段代码 sn-p 看起来有效,所以我们需要更多详细信息。
  • 感谢@CryptoGuy,我包含了我的其余代码。
  • (from o in oeContenxt.OUTAGE_DETAILS select o.OUTAGE_SEQ_ID).ToList() 返回 Id 列表,而不是 OUTAGE_DETAILS。尝试只选择“o”。
  • 感谢@jhenninger24 返回所有字段和所有记录。如果我只想选择某些字段怎么办?如果我想更新/添加记录,是否只需将它们添加到集合中然后保存?

标签: c# wpf linq entity-framework mvvm


【解决方案1】:

用于使用 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>

还有你的虚拟机:

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();
        }
}

尽情享受吧!

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2011-10-11
    • 2020-08-12
    • 2011-08-20
    • 2011-10-25
    • 2013-04-13
    • 2016-07-21
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多