【问题标题】:Displaying child records in data grid in WPF using Entity Framework使用实体框架在 WPF 中的数据网格中显示子记录
【发布时间】:2014-06-10 21:18:58
【问题描述】:

我有两个名为 ProcessProcessTriggers 的表。 ProcessTriggers 指的是Process 表。并且需要创建一个屏幕来显示Process 以及与Process 相关的ProcessTrigger。我使用实体框架创建了数据对象,我的类看起来像。

public partial class Process
    {  
       public Process()
        {
            this.ProcessTriggers = new ObservableCollection<ProcessTrigger>();
        }

        public int ID { get; set; }
        public int WorkflowID { get; set; }
        public string Name { get; set; }
        public bool IsBatch { get; set; }
        public Nullable<System.DateTime> ModifiedOn { get; set; }

        public virtual ObservableCollection<ProcessTrigger> ProcessTriggers { get; set; }
}

我的视图模型看起来像..

public class ProcessViewModel : ViewModel<Process>
{
    private RelayCommand saveCommand;
    private RelayCommand cancelCommand;

    public ProcessViewModel()
    {
        using(var context = new PACEContext())
        {
            this.Entity = context.Processes.FirstOrDefault(i => i.ID == 1);
            IsInEditMode = true;
        }
    }
 }

我将这些 viewModel 绑定到我的视图,实体属性已正确绑定,但 ProcessTriggerCollection 未绑定到数据网格..

<DataGrid ItemsSource="{Binding Entity.ProcessTriggers}" AutoGenerateColumns="True">
                    </DataGrid>

我刚开始学习 WPF、MVVM 和 Entity 框架。有人可以帮忙吗?

【问题讨论】:

  • 您是否将视图的 DataContext 绑定到 ViewModel 的实例?
  • 是否启用了延迟加载?如果没有,那么您必须急切加载导航属性。您是否确认 Entity.ProcessTriggers 不为空?
  • 您是否在调试器输出窗口中看到任何绑定错误消息?
  • 嗨,如果我调试并看到集合中的记录,那么网格会加载记录。

标签: c# wpf entity-framework mvvm


【解决方案1】:

我了解 Process 有一个称为 ProcessTriggers 的其他类的 ObservableCollection。

为什么不创建 ObservableCollection 并绑定它?

private ObservableCollection<ProcessTrigger> _listProcessTriggers;
    public ObservableCollection<ProcessTrigger> ListProcessTriggers
    {
        get { return _listProcessTriggers; }
        set { _listProcessTriggers= value; RaisePropertyChanged("ListProcessTriggers"); }
    }

public ProcessViewModel()
{
    using(var context = new PACEContext())
    {
        this.Entity = context.Processes.FirstOrDefault(i => i.ID == 1);
        ListProcessTriggers = Entity.ProcessTriggers;
        IsInEditMode = true;
    }
}

在 Xmal 绑定中

<DataGrid ItemsSource="{Binding ListProcessTriggers}" AutoGenerateColumns="True />

【讨论】:

  • 非常感谢,但这是我已经为解决此问题所做的解决方案.. :)
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 2016-07-06
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2012-03-08
  • 1970-01-01
相关资源
最近更新 更多