【问题标题】:How to Binding composition based Observable Collection?如何绑定基于组合的可观察集合?
【发布时间】:2017-04-07 05:58:33
【问题描述】:

假设我的模型如下所示,

public class Organization
    private string _organizationName;
    private List<Employee> _employees;
    private List<Contractor> _contractors;

    public string OrganizationName
    {
        get
        {
            return _organizationName;
        }
        set
        {
            _organizationName= value;
        }
    }

    public List<Employee> Employees
    {
        get { return _employees; }
        set { _employees = value; }


    }

    public List<Contractor> Contractors
    {
        get
        {
            return _contractors;
        }
        set
        {
            _contractors = value;
        }
    }
}

}

public class Employee
{
    public string Name { get; set; }

public int EmpID { get; set; }

    public double Salary { get; set; }

}
public class Contractor
{
public string Name { get; set; }

    public int ContractorID { get; set; }

    public double ExperianceCredit { get; set; }

}

我有一个 View(MainWindow) 和一个 Associated ViewModel(OrganizationViewModel)

视图(主窗口)

拥有三个控件:

1) ListView -OrganizationListView 2) 数据网格 -EmployeesDataGrid 3) DataGrid -ContractorsDataGrid

ViewModel(组织视图模型)

private ObservableCollection<Organization> _organizations

    public ObservableCollection<Organization> Organizations
    {
        get
        {`enter code here`
            return _organizations;
        }
        set
        {
            _organizations = value;
        }
    }

绑定:

ListView - OrganizationListView - 绑定到组织(ObservableCollection) DataGrid - EmployeesDataGrid - 绑定到 Organizations.Employees DataGrid - ContractorsDataGrid - 绑定到 Organizations.Contractors

我在访问员工时遇到问题 & 来自 Organizations(ObservableCollection) 的承包商在尝试将其绑定到视图中的相应控件时?

EmployeesDataGrid 和 ContractorsDataGrid 应该依赖于 OrganizationListView

这是可以实现的还是我应该采用不同的方法?

【问题讨论】:

  • 您能发布您的 XAML 代码(绑定代码)吗?
  • 您遇到了什么问题? GUI不显示任何东西或什么?如果没有 BindingExpression,您是否检查了输出?如果绑定正常并且 VM 包含任何数据,您所要做的就是为您的 ListViews 定义 ItemTemplate
  • 尝试为 Model 中的 Employees 和 Contractors 属性实现 INotifyPropertyChanged。

标签: wpf mvvm datagrid


【解决方案1】:

如果我理解正确的话,您要做的是创建一个组织列表,当您单击其中一个组织时,该组织的员工和承包商表格会显示在数据网格中。我说的对吗?

如果是这样,你就很难做到这一点。您想要的是在组织表和承包商表之间创建一个关系,并在组织表和员工表之间创建一个单独的关系。在我看来,用 POCO 做这件事真的是一件傻事。

有很多方法可以做到这一点,但我的首选是类型化数据集。设置 3 个表和 2 个关系,创建一个包含实例化数据集的视图模型。将组织表绑定到列表视图并将两个关系绑定到数据网格,您就完成了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多